C#监控外部程序运行状态与关闭事件实现
在C#软件开发中,有时需要通过主程序监控另一个外部程序的运行或关闭状态。本文将演示如何利用System.Diagnostics.Process类来轮询特定进程是否存在,并订阅其终止事件,以便在目标程序退出时执行预设的处理逻辑。
引入命名空间与声明
首先,需在文件中引用System.Diagnostics命名空间,以便访问Process类用于管理系统进程操作。接着,在类级别声明一个数组变量来存储查找到的进程对象。
复制代码
using System.Diagnostics;
// 用于存储查找到的外部程序进程数组
private Process[] MyProcesses;
核心监控逻辑
为了实现实时监控,通常建议将检查逻辑放入定时器(Timer)的事件处理方法中,按一定间隔(如每秒或数秒)扫描一次。以下是具体的步骤说明:
第1步:获取指定名称的进程列表
利用Process.GetProcessesByName方法,传入目标进程的 executable name(不含扩展名),即可获取该程序当前运行的所有进程实例。这一步能判断目标软件是否正在运行。
复制代码
// 此处以 "SajetManager" 为例,替换为实际需要监控的程序名称
MyProcesses = Process.GetProcessesByName("SajetManager");
foreach (Process myprocess in MyProcesses) {
// 可选:记录当前找到的进程名称,用于调试或日志输出
textBox1.Text += myprocess.ProcessName + "\r\n";
if (myprocess.ProcessName.ToLower() == "sajetmanager")
{ ... }
第2步:配置并订阅进程退出事件
当遍历到目标进程时,需要开启事件触发功能,即设置EnableRaisingEvents属性为true。随后,关联一个事件处理方法来处理Exited事件。这样,一旦该进程被关闭,系统便会调用对应的回调函数。
复制代码
if (myprocess.ProcessName.ToLower() == "sajetmanager")
{
MessageBox.Show("SajetManager");
// 关键设置:允许进程抛出退出事件
myprocess.EnableRaisingEvents = true;
// 绑定自定义的事件处理方法,当程序关闭时触发
myprocess.Exited += new EventHandler(myprocess_Exited);
}
第3步:编写进程关闭时的处理回调
定义上述绑定的事件处理方法myprocess_Exited。在这个方法内部,可以编写任何在目标程序关闭后想要触发的业务逻辑,例如弹出提示、保存数据或重启服务等。
复制代码
private void myprocess_Exited(object sender, EventArgs e)
{
// 这里执行当被监控程序关闭后需要进行的处理
MessageBox.Show("SajetManager close");
}
注意事项与排错
- 进程名称匹配:
GetProcessesByName区分大小写情况取决于操作系统和运行时环境,但在C#中对字符串比较建议使用.ToLower()统一转义后对比,以防止因大小写导致匹配失败。 - 权限问题:如果外部程序是以管理员权限运行的,而你的监控程序是普通用户权限,可能无法正确获取该进程或订阅其事件。此时需要确保监控程序提升权限或在相同权限环境下运行。
- 资源释放:如果在轮询过程中发现进程已经结束但仍持有旧的
Process对象引用,建议在下次循环重新获取最新的进程列表。
以上就是使用C# Process类监控外部程序运行状态的详细内容,更多关于C#进程管理与系统编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









