如何检测一个进程是不是已经执行完毕
Posted
技术标签:
【中文标题】如何检测一个进程是不是已经执行完毕【英文标题】:How to detect whether a process has completed execution如何检测一个进程是否已经执行完毕 【发布时间】:2012-01-11 20:35:18 【问题描述】:这是场景:- 我有两个应用程序 - 一个是 C#,另一个是 VC++。 用 C# 编写的一个是主应用程序,在 button click
上创建了 VC++ 应用程序在 C# 应用程序的 panel
内运行。它运行成功。但是我如何检测 VC++ 应用程序是否已完成执行。虽然我能够看到它已经完成执行,但是当我尝试使用processname.HasExited
技术来合并一些其他任务以在 VC++ 进程完成时执行时,我无法这样做。甚至processname.Exited += new EventHandler(processname_Exited);
似乎也不起作用。
无论如何能告诉我如何解决这个问题吗?
谢谢。
EDIT#1:processname
是一个System.Diagnostic.Process
对象。
【问题讨论】:
文档说“只有当EnableRaisingEvents
属性的值为 true 时才会发生此事件。”您是否记得将EnableRaisingEvents
设置为true
? P.S.,如果你提到 processname
是一个 System.Diagnostic.Process
对象,那将有很大帮助。我不得不去搜索弄清楚你在说什么。
@RaymondChen 是的,它是一个System.Diagnostic.Process
对象。对不起,我忘了提这个。是的,我已将EnableRaisingEvents
属性的值设置为true
。但它仍然无法正常工作。
听起来那个项目并没有真正退出。与任务管理器核对一下:它还在徘徊吗?
【参考方案1】:
我建议您通过在 VC++ 应用程序中的 WM_QUIT 事件时使用 PostMessage() API 发送自定义消息,将客户端应用程序(此处为 VC++ 应用程序)的“退出”传达给父应用程序(此处为 C# 应用程序)。我不确定如何在 C# 父应用程序中接收此消息。
【讨论】:
以上是关于如何检测一个进程是不是已经执行完毕的主要内容,如果未能解决你的问题,请参考以下文章