[英]Crashing When Creating a Process
我試圖在C ++中使用msdn函數(CreateProcess )來運行應用程序。 我沒有收到任何錯誤,但是當我運行它時,它崩潰了。 我還注意到它創建了一個進程,但是沒有運行原本應該運行的文本文件。
我的代碼:
#include <windows.h>
#include <iostream>
#include <string>
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.