Начиная процесс с процессом.начало выпуска
Привет,
У меня есть запущенный сервис, который запускает процесс (exe-файл с некоторыми параметрами), когда приходят запросы. Этот процесс начинается с процесса.Начать. После выполнения Start () я запускаю новый поток, который пытается прикрепиться к этому запущенному процессу по идентификатору и устанавливает событие, когда этот процесс заканчивается. ShellExecute имеет значение true.
runnerProc.Exited += ProcessEnded;
Теперь-все работает нормально до какого-то момента, когда я получаю много запросов и многие процессы запускаются почти одновременно. Большинство из них в порядке, но некоторые висят. Это означает, что новый поток запускается, он находит процесс по идентификатору, который является живым, и устанавливает конечное событие для этого процесса - этот поток будет живым до тех пор, пока процесс не будет завершен. Но проблема в том, что новый процесс запускается с ошибкой (не прикладного, а системного типа!!). В системных журналах я вижу это:"
Application popup: Runner.exe - Application Error : The application was unable to start correctly (0xc0000142). Click OK to close the application.
Теперь-похоже, что мой поток запустился и присоединился к процессу, но так как процесс не закрылся - он думает, что работает бесконечно. Что еще более странно-когда я проверяю диспетчер задач-такой процесс с этим идентификатором больше не работает, странно, почему событие exit не было вызвано...
Я думал, не связано ли это каким-то образом с shellexecute, установленным в True, но не совсем уверен. Весь код имеет обработку ошибок, поэтому, если что-то идет не так, я получаю журнал о том, что процесс не может быть запущен. Так что в моем случае - я не получаю никаких ошибок, и RunnerProc. Exited получает событие, назначенное правильно-оно просто не вызывается 1 из ~50.
Есть идеи, что я делаю не так?
Спасибо!
Что я уже пробовал:
Пробовал здесь разные вещи... сейчас вроде как нет идей
Dave Kreskowiak
Вы никогда не публиковали код, который используете. Похоже, что вы создаете новый поток в неподходящее время, после того как запускаете процесс. Обычно вы создаете новый поток, и этот поток настраивает объект процесса и обработчик завершенного события перед запуском процесса.
Suvabrata Roy
Пожалуйста, опубликуйте свой код, это поможет нам проанализировать проблему