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