2011-11-02 40 views
0

我使用此代碼啓動我的程序CreateProcess()無法正常工作

  int _tmain(int argc, _TCHAR* argv[]) 
{ 
    STARTUPINFO cif; 
    ZeroMemory(&cif,sizeof(STARTUPINFO)); 
    PROCESS_INFORMATION pi; 
    if (CreateProcess(L"C:\\test\\test.exe",NULL, 
     NULL,NULL,FALSE,CREATE_UNICODE_ENVIRONMENT,NULL,NULL,&cif,&pi)==TRUE) 
    { 
     cout << "process" << endl; 
     cout << "handle " << pi.hProcess << endl; 
    } 
    system("pause"); 
    return 0; 
} 

程序正常啓動,但立即失敗(沒有響應並失敗)。 CreateProcess返回true。當我從代碼啓動test.exe時,它可以正常工作。

+0

調試器告訴你什麼是錯誤的?你*是*使用調試器,不是嗎? –

+0

哪個程序崩潰,正在啓動新進程的代碼或test.exe? –

+0

如果您將進程創建標誌(而不是CREATE_UNICODE_ENVIRONMENT)傳遞給「0」,會發生什麼情況?您將'CREATE_UNICODE_ENVIRONMENT'作爲此標誌和'NULL'傳遞給環境塊,但是您確定調用進程的環境塊使用'UNICODE'字符嗎? –

回答

5

您必須清零STARTUPINFO和PROCESS_INFORMATION的內存,並且必須設置STARTUPINFO結構的cb字段。

複製sample code in the Microsoft documentation是一個很好的開始。

+0

的確如此,但幾分鐘前OP已經發表了評論,稱他發現問題。 – karlphillip

+1

不設置cb字段可能不是一個好主意。它可能適用於他特定版本的Windows。不要指望它能在早期版本或後期版本上運行。或者在爲這件事提供服務包之後。 –

0

我發現問題,我沒有設置test.exe目錄(CreateProcess中的第8個參數)。感謝所有