Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
964 views
in Technique[技术] by (71.8m points)

windows - How can I get a list of child processes for a given service in 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.

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

replacing n with the service's process id.

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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...