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

标签 c# .net windows process c#-2.0

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

例如,我在进程中启动一个程序。该可执行文件会进行一些文件修补,然后启动主程序——一个单独的 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# - 有没有办法检测一个进程是否/何时在 C# .Net 2.0 中启动另一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1844499/

相关文章:

java - System.gc() 与 GC.Collect()

java - 如何在 Java 中使用/反序列化 .Net WCF 服务 JSON 响应

R 无法识别命令行选项。 (警告 : unknown option '-d' )

windows - 文件/目录路径应如下所示 - Powershell 输出

c# - 子字符串,如果字符串不够长用空格替换字符

c# - GetEnvironmentVariable ("TEMP") 没有波浪号 (~)

c# - 查询Elastic Search时如何添加条件表达式?

c# - Linux 下 AutoResetEvent 的 C++ 等价物是什么?

.net - 文本数据最快的哈希算法

java - 如何使 JFileChooser 默认为计算机 View 而不是我的文档