当前位置:  开发笔记 > 编程语言 > 正文

在.NET中查找进程树

如何解决《在.NET中查找进程树》经验,为你挑选了1个好方法。

我正在寻找一种使用C#或其他.NET语言查找进程树(如Process Explorer之类的工具所示)的简便方法。查找另一个进程的命令行参数也很有用(System.Diagnostics.Process上的StartInfo似乎对当前进程以外的其他进程无效)。

我认为这些事情只能通过调用win32 api来完成,但是我很高兴被证明是错误的。



1> DanO..:

如果您不想P / Invoke,则可以使用性能计数器来获取父ID:

foreach (var p in Process.GetProcesses())
{
   var performanceCounter = new PerformanceCounter("Process", "Creating Process ID", p.ProcessName);
   var parent = GetProcessIdIfStillRunning((int)performanceCounter.RawValue);
   Console.WriteLine(" Process {0}(pid {1} was started by Process {2}(Pid {3})",
              p.ProcessName, p.Id, parent.ProcessName, parent.ProcessId );
}

//Below is helper stuff to deal with exceptions from 
//looking-up no-longer existing parent processes:

struct MyProcInfo
{
    public int ProcessId;
    public string ProcessName;
}

static MyProcInfo GetProcessIdIfStillRunning(int pid)
{
    try
    {
        var p = Process.GetProcessById(pid);
        return new MyProcInfo() { ProcessId = p.Id, ProcessName = p.ProcessName };
    }
    catch (ArgumentException)
    {
        return new MyProcInfo() { ProcessId = -1, ProcessName = "No-longer existant process" };
    }
}

现在只需将其放入所需的任何树形结构中就可以了。

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有