Реагирование на завершение начала процесса - PullRequest
0 голосов
/ 28 ноября 2011

Вопрос рождается из любопытства здесь:

Как мне поступить, чтобы получать уведомления или опросы, чтобы увидеть, когда процесс в настоящее время завершается?

То есть мое приложение может прослушивать событие "начало завершения" из процесса, например, чтобы отследить, сколько времени в среднем занимает закрытие определенного процесса?

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

Любая помощь будет принята с благодарностью:)

Ответы [ 3 ]

3 голосов
/ 28 ноября 2011

Единственный способ, которым я знаю, что вы можете сделать это без опроса, - через WMI.В Интернете есть множество примеров, например, Использование WMI для мониторинга создания, удаления и изменения процессов в .NET .

WMI хорошо упакован библиотеками .net.Например, в приведенном выше примере для подписки на события WMI используется ManagementEventWatcher.В пространстве имен System.Management есть целый клад доброты WMI.

0 голосов
/ 28 ноября 2011

Я не уверен, существует ли WIN32 API для подписки на события завершенного процесса, но вы можете выполнить опрос, просто получив список запущенных процессов:

 var processes = System.Diagnostics.Process.GetProcesses();

Я бы использовал ProcessId в качестве ключа для моего словаря, чтобы проверить, когда он запускается и когда он заканчивается.

0 голосов
/ 28 ноября 2011

Я не совсем уверен, есть ли способ, чтобы это была операция «push» (вы как-то получаете уведомление об окончании процесса).

Но то, что я хотел бы сделать, чтобы подражать этому наблюдению, - это создать службу Windows, которая опрашивает процесс с заданным интервалом (скажем, каждые 2 секунды или сколько угодно большой задержки для вас). Таким образом, вы можете справиться с ситуацией, когда другой процесс завершится, и действовать соответственно.

...