2

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

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

进程可执行文件启动的 .NET 事件

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

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

4

2 回答 2

3

要么你自己开始这个过程,要么通过枚举Process.GetProcesses()或调用来找到它Process.GetProcessesByName(...)

无论如何,您都会有一些进程句柄p。现在您可以订阅它的Exited事件或等待p.WaitForExit()

此答案基于您的C#标签。但是,PowerShell它也会像这样工作。只是语法可能会改变。所以你需要探索PowerShell's Process API(Start-Process和类似的)。

于 2013-05-21T09:17:06.170 回答
3

基本上,您需要连接到 Windows Management API,它允许您监听启动和停止的进程。一旦 WMI 向您的程序发送通知,您将在其中一个中获得控制权(基于答案

private void ProcessEnded(object sender, EventArrivedEventArgs e)
private void ProcessStarted(object sender, EventArrivedEventArgs e)

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

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

于 2013-05-21T09:17:55.800 回答