2017-06-15 41 views

回答

4

可以使用WaitForSingleObject功能上创建的过程处理,像这样:

STARTUPINFO si {sizeof(si)}; 
PROCESS_INFORMATION pi {}; 

CreateProcessW(/*your arguments here*/); 

WaitForSingleObject(pi.hProcess, INFINITE); 

请注意,如果你使用INFINITE的等待时间,功能块,直到进程终止。如果您希望父进程在同时进行其他操作,最好是将该代码放在单独的线程中。

如果您希望父进程是创建进程的完整包装器,请在完成获取子进程的退出代码时使用GetExitCodeProcess

DWORD dwExit; 
GetExitCodeProcess(pi.hProcess, &dwExit); 

此代码只是一个简单的例子。我在答案中提到的所有三个函数都可能失败,而健壮的代码将检查它们的返回值,并在出现故障时采取相应措施。

+1

对downvote感到好奇。 OP的问题可能表明缺乏研究,但我的答案是正确的。 –

+1

*“如果您希望父进程在同时进行其他操作,最好是将该代码放在单独的线程中。”* - 这是一种做法,但不一定是最好的。 'MsgWaitForMultipleObjects'可能更合适。首先,它不需要你与另一个线程同步。 – IInspectable

+1

['PROCESS_INFORMATION'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684873(v = vs.85).aspx)中没有'dwExit'字段。 – zett42