簡體   English   中英

創建進程時崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM