【发布时间】:2011-11-28 13:22:09
【问题描述】:
这里出于好奇的问题:
我将如何获得通知或轮询,以查看当前何时终止进程?
所以我的应用程序可以侦听来自进程的“终止开始”事件,例如,跟踪特定进程平均需要多长时间才能关闭?
请注意,这与我的进程触发终止开关无关,这很简单,是的,但我的应用程序只能充当观察者。
任何帮助将不胜感激:)
【问题讨论】:
这里出于好奇的问题:
我将如何获得通知或轮询,以查看当前何时终止进程?
所以我的应用程序可以侦听来自进程的“终止开始”事件,例如,跟踪特定进程平均需要多长时间才能关闭?
请注意,这与我的进程触发终止开关无关,这很简单,是的,但我的应用程序只能充当观察者。
任何帮助将不胜感激:)
【问题讨论】:
我知道您无需轮询即可执行此操作的唯一方法是通过 WMI。网上有很多例子,例如Using WMI to monitor process creation, deletion and modification in .NET.
WMI 由 .net 库很好地包装。例如,上面的示例使用ManagementEventWatcher 订阅 WMI 事件。在 System.Management 命名空间中有一个完整的 WMI 宝库。
【讨论】:
我不确定是否有办法将其作为“推送”操作(您会以某种方式收到结束过程的通知)。
但是我要模仿这个观察结果是创建一个 Windows 服务,它以指定的时间间隔(例如,每 2 秒或您可以接受的延迟时间)轮询进程。这样你就可以在其他进程结束时处理这种情况并采取相应的行动。
【讨论】:
我不确定是否有用于订阅进程终止事件的 WIN32 API,但您可以通过获取正在运行的进程列表来进行轮询:
var processes = System.Diagnostics.Process.GetProcesses();
我会使用ProcessId 作为我的字典的键来检查它何时启动和何时终止。
【讨论】: