如何使进程在终止时发送通知

时间:2013-05-21 09:10:13

标签: c# windows process

我想以编程方式确定进程何时终止。我在各种论坛中搜索并遇到了PsSetCreateProcessNotifyRoutine例程。

另外,我遇​​到了类似的StackOverflow问题:

.NET Events for Process executable start

在接受的答案中,我看到了一个我可以使用的查询。然而,我无法完全理解查询。

有人建议我可以实施我的解决方案吗?

2 个答案:

答案 0 :(得分:3)

您可以自行开始此过程,也可以通过枚举Process.GetProcesses()或致电Process.GetProcessesByName(...)来找到该过程。

在任何情况下,您都会有一些流程句柄p。现在,您可以订阅其Exited事件或等待p.WaitForExit()

此答案基于您的C#标记。但是,使用PowerShell它也会像这样工作。只是语法可能会改变。因此,您需要探索PowerShell的Process API(Start-Process等)。

答案 1 :(得分:3)

基本上,您需要挂钩到Windows Management API,它允许您监听已启动和已停止的进程。一旦WMI向您的程序发送通知,您将获得任何一个(基于answer

的控制权
private void ProcessEnded(object sender, EventArrivedEventArgs e)
private void ProcessStarted(object sender, EventArrivedEventArgs e)

从参数中,您将能够获得进程名称。

这是您在托管代码中收到通知的方式。现在,下一步是将此通知发送到您的脚本,根据它是什么,您可以使用与WCF的进程间通信,RESTfull调用,运行带参数的脚本等。