CreateProcess 程序没有启动前一直等待
时间: 2024-09-20 19:11:49 浏览: 91
`CreateProcess`是Windows API中的一个函数,用于创建新的进程并执行指定的应用程序。当你使用`CreateProcess`时,如果你想让主进程在新进程开始执行之前保持阻塞状态,直到新进程完成初始化并开始执行,可以设置`STARTUPINFO`结构体中的`bInheritHandles`标志,并通过`dwFlags`参数启用`CREATE_SUSPENDED`标志。
以下是一个简单的示例,展示了如何做到这一点:
```cpp
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; // 设置必要的标志
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
si.wShowWindow = SW_HIDE; // 隐藏窗口
// 初始化过程信息
pi.hProcess = nullptr;
pi.hThread = nullptr;
if (CreateProcess("path_to_your_program.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi))
{
// 现在新进程暂停了,你可以处理一些事情,比如读取它的输出...
// 这里执行你需要的操作...
ResumeThread(pi.hThread); // 当准备好了,恢复进程执行
WaitForSingleObject(pi.hProcess, INFINITE); // 主进程等待新进程结束
}
else
{
// 处理错误...
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
```
在这个例子中,`CreateProcess`会创建一个新的进程,并且该进程会被暂停(`CREATE_SUSPENDED`)。然后,你可以对新进程进行一些操作(如读取输出),最后使用`ResumeThread`恢复进程并调用`WaitForSingleObject`等待它结束。
阅读全文
相关推荐


















