如何在C#中获取给定服务的子进程列表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中获取给定服务的子进程列表?相关的知识,希望对你有一定的参考价值。
我有一个服务,它创建了许多子进程。使用c#我需要确定当前正在运行的这些子进程的数量。
例如,我有一个名为“TheService”的服务。这会产生5个子进程,全部称为“process.exe”。是否可以确定在服务下运行的子进程数?基本上我需要知道“process.exe”的实例数,只给出服务/服务进程名称的名称。
答案
您需要使用WMI,Win32_Process类包括父进程ID。所以WQL查询(参见.NET下WMI的System.Management命名空间)如:
SELECT * FROM Win32_Process Where ParentProcessId = n
用服务的进程ID替换n。
编辑示例代码(基于Arsen 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;
}
另一答案
我不确定你所说的“服务名称”是什么意思 - 那会是process.exe吗?
如果是这样,静态方法Process.GetProcessesByName()应该做的伎俩:
Process[] procs = Process.GetProcessesByName("process");
Console.WriteLine(procs.Length);
如果我误解了你的问题,请告诉我。
以上是关于如何在C#中获取给定服务的子进程列表?的主要内容,如果未能解决你的问题,请参考以下文章