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.
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> 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;
}
I am not sure exactly what you mean by "the name of the service" - would that be process.exe?
If so, the static method Process.GetProcessesByName() should do the trick:
Process[] procs = Process.GetProcessesByName("process");
Console.WriteLine(procs.Length);
Let me know if I misunderstood your question.