我试图在C++中使用msdn函数(CreateProcess)来运行应用程序.我没有得到任何错误,但是当我运行它时,它会崩溃.我做了什么也注意到它创建了一个进程,但它没有运行它应该的文本文件.
我的代码:
#include#include #include using namespace std; void createPro (); int main() { createPro(); } void createPro () { LPCTSTR lpApplicationName = "C:/Users/Andyy/Desktop/hello.txt"; LPSTARTUPINFO lpStartupInfo; LPPROCESS_INFORMATION lpProcessInfo; memset(&lpStartupInfo, 0, sizeof(lpStartupInfo)); memset(&lpProcessInfo, 0, sizeof(lpProcessInfo)); if (!CreateProcess(lpApplicationName, NULL, NULL, NULL, NULL, NULL, NULL, NULL, lpStartupInfo, lpProcessInfo ) ) { cout << "Failed to create process" << lpApplicationName << endl; } cout << "Program exec: " << lpApplicationName << endl; }
它创建了进程,但无法运行文本文件,并且编译器中没有显示错误.提前致谢.返回错误:进程返回-1073741819(0xC0000005)
CreateProcess
用于从可执行文件创建过程对象.您正在传递一个不是可执行文件的文本文件.据推测,您实际上是在尝试在默认文本编辑器中显示文本文件.使用ShellExecuteEx
这样做.
除此之外,您不会分配调用所需的两个结构CreateProcess
.相反,你声明指向结构的指针,并保持指针未初始化.我希望这是访问冲突错误的原因0xC0000005
.为了将来参考,您可以像这样分配和初始化这些结构:
STARTUPINFO StartupInfo = { sizeof StartupInfo }; PROCESS_INFORMATION ProcessInfo = { 0 };
然后,通过&StartupInfo
与&ProcessInfo
对CreateProcess
.当然,我只是为了完整性而添加这个建议.你将丢弃所有与之相关的代码CreateProcess
并ShellExecuteEx
转而致电.