有没有办法检测进程是否/何时在C#.Net 2.0中启动另一个进程?

我正在寻找一种方法来检测我的应用程序启动的进程是否反过来产生了额外的进程.希望是我可以拥有一个启动和应用程序的线程,直到它退出时监视,然后在该应用程序退出时触发其他一些操作.问题是,对于我想要监视的一些应用...

我正在寻找一种方法来检测我的应用程序启动的进程是否反过来产生了额外的进程.希望是我可以拥有一个启动和应用程序的线程,直到它退出时监视,然后在该应用程序退出时触发其他一些操作.问题是,对于我想要监视的一些应用程序,他们正在启动一个额外的进程然后退出.所以我的触发器在应用程序退出之前触发.

例如,我在Process中启动一个程序.该可执行文件执行一些文件修补,然后启动主程序 – 一个单独的exe – 然后退出.这会导致Process.HasExited返回true,这会过早地触发我的触发器.我真正关心的是当主程序退出时,在这种情况下初始进程启动的程序,但我似乎找不到以编程方式执行此操作的方法.

解决方法:

好吧,我想通了.使用.Net 2.0中的Process类无法直接访问父进程信息,但使用System.Diagnostics.PerformanceCounter类,您可以从“创建进程ID”计数器名称访问父进程ID.解决我的问题我做了类似的事情:

...
/// check to see if the monitored application (started in myProcess) is still running
public bool isRunning()
{
    bool running = !this.myProcess.HasExited;
    if(!running){
        foreach (Process p in Process.GetProcesses())
        {
            PerformanceCounter pc = new PerformanceCounter("Process", "Creating Process Id", p.ProcessName);
            if (this.myProcess.Id == (int)pc.RawValue)
            {
                running = true;
            }
        }
    }
    return running;
}
...

我在此示例中省略了错误处理,作为更高级的解决方案,您可以通过维护所有分支进程ID的列表来跟踪生成的进程树,此示例仅监视一个直接子进程.

本文标题为:有没有办法检测进程是否/何时在C#.Net 2.0中启动另一个进程?

基础教程推荐