サービスから別のプロセスを起動しようとしています(データを収集してレジストリに書き込むコンソールアプリです)が、何らかの理由で正しく起動できません。
私がやろうとしていることの基本は次のとおりです。
- プロセスを起動します
- プロセスが終了するのを待ちます
- プロセスからリターンコードを取得します
私は現在、次のコードを使用しています。
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の提案に基づいて、プロセスハンドルの問題を修正しましたが、実際にはプロセスが終了するのを待ちます。しかし、手動で殺さない限り、それは決して終わりません。