Управление процессами в .NET - PullRequest
       2

Управление процессами в .NET

2 голосов
/ 18 сентября 2010

Итак, у меня есть вспомогательный процесс, написанный на C ++, и я открываю его, передаю аргументы, и он передает информацию моей программы через стандартный поток вывода.

PS.У меня нет исходного кода для вспомогательного процесса exe.

Если бы мое приложение было закрыто из диспетчера задач или по какой-то причине произошел сбой, как я могу убедиться, что мой вспомогательный exe закрыт?Это возможно?Нужен ли мне внешний файл?

Ответы [ 3 ]

3 голосов
/ 18 сентября 2010

Используйте Объекты заданий для управления группами процессов.В этом случае вы хотите создать объект задания, используя CreateJobObject , используйте SetInformationJobObject , чтобы установить флаг JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, и назначить вспомогательный процесс для задания, используя AssignProcessToJobObject.Не закрывайте дескриптор объекта задания, если вы не хотите уничтожить вспомогательный процесс.Когда ваш процесс завершается (любым способом), дескриптор будет закрыт, и ваш вспомогательный процесс будет уничтожен.

0 голосов
/ 18 сентября 2010

Самый простой способ - закрыть его при обычном завершении работы приложения и при вызове исключения AppDomain.CurrentDomain.UnhandledException (т. Е. Ваше приложение будет аварийно завершено)

0 голосов
/ 18 сентября 2010

Вы должны создать наследуемый дубликат дескриптора родительского процесса и передать его значение вспомогательному процессу в командной строке. Затем вспомогательный процесс может ожидать этого дескриптора в отдельном потоке (или основном потоке, если вы сообразительны). Когда дескриптор становится сигнальным, это означает, что процесс запуска завершен.

Редактировать

Поскольку вы не можете изменить вспомогательный процесс, ваши возможности более ограничены. Вы можете попробовать подключить обработчик к событию OnAppDomainUnloaded процесса запуска, но я не уверен, что это будет работать во всех случаях, которые вас беспокоят. Вы также можете создать третий процесс для мониторинга первого. Этот процесс будет работать, как я описал выше. Если вы хотите стать действительно модным, вы можете внедрить удаленный поток в вспомогательный процесс для мониторинга родителя. Это очень технически, поэтому я рекомендую против этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...