我想以编程方式确定进程何时终止。我在各种论坛中搜索并遇到了PsSetCreateProcessNotifyRoutine
例程。
另外,我遇到了一个类似的 StackOverflow 问题:
在接受的答案中,我看到了一个可以使用的查询。但是,我无法完全理解该查询。
有人可以建议我可以实施我的解决方案的方法吗?
我想以编程方式确定进程何时终止。我在各种论坛中搜索并遇到了PsSetCreateProcessNotifyRoutine
例程。
另外,我遇到了一个类似的 StackOverflow 问题:
在接受的答案中,我看到了一个可以使用的查询。但是,我无法完全理解该查询。
有人可以建议我可以实施我的解决方案的方法吗?
要么你自己开始这个过程,要么通过枚举Process.GetProcesses()
或调用来找到它Process.GetProcessesByName(...)
。
无论如何,您都会有一些进程句柄p
。现在您可以订阅它的Exited
事件或等待p.WaitForExit()
。
此答案基于您的C#
标签。但是,PowerShell
它也会像这样工作。只是语法可能会改变。所以你需要探索PowerShell
's Process API(Start-Process
和类似的)。
基本上,您需要连接到 Windows Management API,它允许您监听启动和停止的进程。一旦 WMI 向您的程序发送通知,您将在其中一个中获得控制权(基于答案)
private void ProcessEnded(object sender, EventArrivedEventArgs e)
private void ProcessStarted(object sender, EventArrivedEventArgs e)
从参数中,您将能够获得进程名称。
这就是您在托管代码中接收通知的方式。现在下一步是将此通知发送到您的脚本,根据具体情况,您可以使用 WCF 的进程间通信、RESTfull 调用、运行带参数的脚本等。