【发布时间】:2009-07-02 10:25:55
【问题描述】:
我有一项服务,它创建了许多子进程。使用 c# 我需要确定当前正在运行的这些子进程的数量。
例如,我有一个名为“TheService”的服务正在运行。这会产生 5 个子进程,都称为“process.exe”。是否可以确定服务下运行的子进程的数量?本质上,我只需要知道服务/服务进程名称的名称即可知道“process.exe”实例的数量。
【问题讨论】:
标签: c# windows process service
我有一项服务,它创建了许多子进程。使用 c# 我需要确定当前正在运行的这些子进程的数量。
例如,我有一个名为“TheService”的服务正在运行。这会产生 5 个子进程,都称为“process.exe”。是否可以确定服务下运行的子进程的数量?本质上,我只需要知道服务/服务进程名称的名称即可知道“process.exe”实例的数量。
【问题讨论】:
标签: c# windows process service
您需要使用 WMI,Win32_Process 类包含父进程 ID。所以一个 WQL 查询(参见 .NET 下 WMI 的 System.Management 命名空间)如下:
SELECT * FROM Win32_Process 其中 ParentProcessId = n用服务的进程ID替换n。
编辑示例代码(基于Arsen Zahray的代码):
static List<Process> GetChildProcesses(int parentId) {
var query = "Select * From Win32_Process Where ParentProcessId = "
+ parentId;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
var result = processList.Cast<ManagementObject>().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);
如果我误解了你的问题,请告诉我。
【讨论】: