如何在C#中获取给定服务的子进程列表? [英] How can I get a list of child processes for a given service in C#?

查看:94
本文介绍了如何在C#中获取给定服务的子进程列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个创建多个子进程的服务.使用c#,我需要确定当前正在运行的这些子进程的数量.

I have a service which creates a number of child processes. Using c# I need to determine the number of these child processes which are currently running.

例如,我有一个名为"TheService"的服务.这将产生5个子进程,全部称为"process.exe".是否可以确定服务下运行的子进程的数量?本质上,我仅需要提供服务/服务进程名称的名称就需要知道"process.exe"实例的数量.

For example I have a service running called "TheService". This spawns 5 child processes, all called "process.exe". Is it possible to determine the number of child processes running under the service? Essentially I need to know the number of instances of "process.exe" given only the name of the service/service process name.

推荐答案

您需要使用WMI,即

You need to use WMI, the Win32_Process class includes the parent process id. So a WQL query (see System.Management namespace for WMI under .NET) like:


SELECT * FROM Win32_Process Where ParentProcessId = n

用服务的进程ID替换 n .

replacing n with the service's process id.

EDIT示例代码(基于 Arsen Zahray 的代码):

EDIT Sample code (based on code by 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;
}

这篇关于如何在C#中获取给定服务的子进程列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆