Я пытаюсь запустить другой процесс из службы (это консольное приложение, которое собирает некоторые данные и записывает их в реестр), но по какой-то причине я не могу запустить его правильно.Запуск процесса из службы
основы I того, что я пытаюсь сделать это следующим образом:
- запустить процесс
- Дождитесь завершения процесса
- Получить код возврата из процесса
в настоящее время я использую следующий код:
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».
FYI, это код, который я действительно использовал в других местах с успехом, просто не в службе.
Может ли быть запущено из службы и есть проблемы с разрешениями?
Редактировать: Теперь я понял, что он действительно запустит приложение (я вижу его в TaskMan), но он кажется застрявшим. Он там, но ничего не делает.
Основываясь на suggestion Роба Кеннеди, я исправил проблему с дескриптором процесса, и он действительно ждет завершения процесса. Но он никогда не заканчивается, если я не убью его вручную.