我想以编程方式确定进程何时终止。我在各种论坛中搜索并遇到了PsSetCreateProcessNotifyRoutine
例程。
另外,我遇到了类似的StackOverflow问题:
.NET Events for Process executable start。
在接受的答案中,我看到了一个我可以使用的查询。然而,我无法完全理解查询。
有人建议我可以实施我的解决方案吗?
答案 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调用,运行带参数的脚本等。