Monitor child processes of a process

.net, c#, process

Solution

Take a look at this - Find all child processes of my own .NET process / find out if a given process is a child of my own? or http://social.msdn.microsoft.com/Forums/vstudio/en-US/d60f0793-cc92-48fb-b867-dd113dabcd5c/how-to-find-the-child-processes-associated-with-a-pid. They provide ways to find child processes by a parent PID (which you have).

You can write monitor the process you create and also get its children. You could then track everything, and wait for them all to finish. I say "try" because I'm not sure you could catch very rapid changes (a process starting others and then dying before you get his children).

Problem

I'm running .exe file using this code: ``` Process proc = Process.Start("c:\program.exe"); proc.WaitForExit(); ``` If I start `Stopwatch` before starting the process and stop it after `proc.WaitForExit();` line, I can get the time that user was using that particular program. The problem I'm facing is that some programs (and games) use launchers - some small .exe file that usually checks something and then launches another .exe file that is actually the program/game that the user wants to run. In these cases the code above doesn't work because it returns after launcher exists. How can I track all processes that `proc` runs, and wait unitl all of them are terminated?

Original source

Related problems