C# 如何从我的windows服务侦听进程启动事件?

C# 如何从我的windows服务侦听进程启动事件?,c#,windows-services,C#,Windows Services,我希望我的Windows服务能够监听特定进程(例如进程a)何时运行,并能够随意关闭它。这有多可能?您可以使用该类在进程启动时接收通知 根据指定的事件查询订阅临时事件通知 MSDN页面上有一个可能适合您需要的示例 以下示例显示了由于事件类为uu InstanceCreationEvent而创建Win32_进程实例时,客户端如何接收通知 ManagementEventWatcher类允许您设置一个值,以指定要侦听的WQL事件的类型。和中提供了有关WQL查询选项和结构的更多信息 或者,您可以使用计时器

我希望我的Windows服务能够监听特定进程(例如进程a)何时运行,并能够随意关闭它。这有多可能?

您可以使用该类在进程启动时接收通知

根据指定的事件查询订阅临时事件通知

MSDN页面上有一个可能适合您需要的示例

以下示例显示了由于事件类为uu InstanceCreationEvent而创建Win32_进程实例时,客户端如何接收通知

ManagementEventWatcher
类允许您设置一个值,以指定要侦听的WQL事件的类型。和中提供了有关WQL查询选项和结构的更多信息

或者,您可以使用计时器每隔一段时间查询由返回的正在运行的进程数组


然后,使用或直接从返回的结果数组获取对该进程的引用,并使用该方法终止该进程。

。如果它有一个窗口界面,你可以(就像点击“X”)谢谢!getProcessByName()对我很有用。虽然我不得不在服务启动时模拟一点延迟,但我不清楚如何实际监听特定进程启动的事件。例如,如果notepad.exe启动,我如何通知我的事件?@BenKay使用
WaitForNextEvent()
方法侦听事件。如果您在引用示例中的代码,请注意他们已将超时设置为5秒,因此您可能希望删除或延长超时或使用循环。示例中侦听的事件是任何Win32进程的开始,因此,一旦收到该事件,就可以调用并枚举
getprocesss()
中的结果,以查找要查找的进程。如果它不在那里,只需再次循环并
WaitForNextEvent()
。@BenKay服务
onStart()
方法应该毫不延迟地完成。您可能更愿意启动
任务
线程
来继续工作。