我怎样才能得到子进程的列表,在C#中给定的服务?(How can I get a list of c

2019-07-29 12:59发布

我有创建许多子进程的服务。 使用C#我需要确定这是目前运行这些子进程的数量。

比如我有一个名为“TheService”服务运行。 这5个派生的子进程,全称为“process.exe”。 是否有可能确定服务下运行的子进程的数目? 基本上我需要知道给出的服务/服务流程的名称只有名称“process.exe”的实例的数量。

Answer 1:

您需要使用WMI的Win32_Process的类包括父进程ID。 因此,一个WQL查询(参见下.NET System.Management命名空间的WMI),如:

SELECT * FROM Win32_Process Where ParentProcessId = n

与服务的进程ID 替换掉n。

编辑示例代码(基于代码阿尔森Zahray ):

static List<Process> GetChildPrecesses(int parentId) {
  var query = "Select * From Win32_Process Where ParentProcessId = "
          + parentId;
  ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
  ManagementObjectCollection processList = searcher.Get();

  var result = processList.Select(p =>
    Process.GetProcessById(Convert.ToInt32(p.GetPropertyValue("ProcessId")));
  ).ToList();

  return result;
}


Answer 2:

我不知道究竟你所说的“服务名称”的意思 - 那会是process.exe?

如果是这样,静态方法Process.GetProcessesByName()应该做的伎俩:

Process[] procs = Process.GetProcessesByName("process");
Console.WriteLine(procs.Length);

让我知道如果我误解你的问题。



文章来源: How can I get a list of child processes for a given service in C#?