【问题标题】:Is there a way to detect if/when a Process starts another Process in C# .Net 2.0?有没有办法检测一个进程是否/何时在 C# .Net 2.0 中启动另一个进程?
【发布时间】:2009-12-04 02:29:34
【问题描述】:

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

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

【问题讨论】:

  • 作为替代方案,有没有办法查看进程列表中的每个进程并确定它是否以某种方式(直接或间接)源自特定进程 ID?

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


【解决方案1】:

好的,我想通了。使用 .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 的列表来跟踪生成的进程树,本例仅监视一个直接子进程。

【讨论】:

    【解决方案2】:

    如果这些其他进程是专有的/不在您的控制范围内,我真的不知道您如何监控它们以检查它们是否产生了新的进程,如果您想检查产生的进程是否产生了孙子进程和。 ..(你知道我要去哪里)。

    无论如何,这是我的看法,它可能是可行的,我只是不认为它可以单独使用 .NET/C# 来实现。

    希望其他人可以提供真正的解决方案。

    【讨论】:

    • 我看不出它是如何以通用方式完成的。对于某些进程产卵方式是可行的,但如果产卵过程不在您的控制之下......
    • 你提到它可能无法单独使用 .Net/C# 实现,有什么想法可以用 C++ 实现类似的东西吗?
    【解决方案3】:

    我认为,这不是很简单,但可行。

    在这种情况下,我会选择使用 WMI。你先开始 枚举现有进程 [ether way、WMI 或 Net Process] 并记住这些,你会看到的。 然后启动两个 WMI 事件查询,一个使用 Win32_ProcessStartTrace 另一个查询 Win32_ProcessStopTrace [参见 WMI SDK]。 两者都返回一个 Win32_Process 的实例,它总是包含 “父进程 ID”。如果这是其中之一,您之前保存过, 你有产生的过程。 “Win32_Process”还包含 一个“杀”的方法;不知道,你最后想做什么;-)

    希望,这会有所帮助。不要犹豫,询问更多详情。

    br--马布拉

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多