2013-06-24 60 views
0

我想從createprocess函數的代碼中啓動一個進程。命令行是好的,另一個EXE,我可以從Visual Studio沒有問題地啓動它。CreateProcess函數問題

當我試圖從createprocess的其他進程啓動它時,它給了我 - 運行時錯誤此應用程序請求運行時以非常規方式終止它。

可能是什麼問題?我怎樣才能消除這個問題?

 STARTUPINFO si; 
     PROCESS_INFORMATION pi; 

     bool bResult; 

     ZeroMemory(&si, sizeof(si)); 
     si.cb = sizeof(si); 
     ZeroMemory(&pi, sizeof(pi)); 

     //Cast System::String* __gc to char* 
     char* chAppName = (char*)(void*)Marshal::StringToHGlobalAnsi(AppName); 
     char* chCmdLine = (char*)(void*)Marshal::StringToHGlobalAnsi(CmdLine); 


     //Start the child process. 
     bResult = CreateProcess(chAppName, // No module name (use command line) 
       chCmdLine,  // Command line 
       NULL,   // Process handle not inheritable 
       NULL,   // Thread handle not inheritable 
       FALSE,   // Set handle inheritance to FALSE 
       0,    // No creation flags 
       NULL,   // Use parent's environment block 
       NULL,   // Use parent's starting directory 
       &si,   // Pointer to STARTUPINFO structure 
       &pi);   // Pointer to PROCESS_INFORMATION structure 
+0

你的意思是c#而不是C++? –

+0

您可以發佈您用於創建過程的代碼嗎? – doctorlove

+0

我正在使用託管C++(C++。NET)。 –

回答

0

儘量消除StringToHGlobalAnsi電話和硬編碼他們,而不是第一個。如果這能夠解決問題,我們可以整理StringToHGlobalAnsi的電話。

+0

我已經做了一個簡單的測試控制檯應用程序,該功能可以在投射StringToHGlobalAnsi和測試應用程序時正常工作。 –