我正在尝试从服务启动另一个进程(它是一个控制台应用程序,它收集一些数据并将其写入注册表)但由于某种原因我无法让它正确启动。
我正在尝试做的基本情况如下:
- 启动进程
- 等待过程完成
- 从进程中检索返回码
我目前正在使用以下代码:
STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (CreateProcess(PATH, ARGS, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
::WaitForSingleObject(processInfo.hProcess, INFINITE);
DWORD exit = 100;
GetExitCodeProcess(processInfo.hProcess, &exit);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
return exit;
}
在调用 CreateProcess() 时,它成功并进入 if 语句的主体。对 WaitForSingleObject 的调用会立即返回,这是不应该的,因为该过程大约需要 20-30 秒才能完成。最后,调用 GetExitCodeProcess() 失败并且没有设置值“exit”。
仅供参考,这是我在其他地方成功使用过的代码,只是不在服务中。
难道是它是从服务启动的并且存在权限问题?
编辑: 我现在意识到它实际上会启动应用程序(我可以在 TaskMan 中看到它),但它似乎被卡住了。它在那里,但没有做任何事情。
根据 Rob Kennedy 的建议,我修复了进程句柄问题,它实际上确实在等待进程完成。但除非我手动杀死它,否则它永远不会完成。