TLevin10
asked on
Watch to see what processes are spawned by another process
Hello,
I have a requirement to track what programs are opened by another process. The process is third party, so I cannot change it. I am looking to attach some sort of tracer to the first process so that I can see if it spawns other processes and add them to a list. Consider the following:
Program Z runs a launcher (Process A)
Process A launches Process B
Process A launches Process C
Program Z must maintain a list of the handles of Process B, and Process C, and must know when they are closed.
The business requirement for this project is that our program, Program Z, invokes a launcher (Process A) for other programs. We need to know when the other programs are closed, and so we are trying to track the handles for the additional processes which are spawned by Process A.
Is it possible to figure out what processes are spawned from a 3rd party process, and to find out when the new processes are closed?
Thanks!
I have a requirement to track what programs are opened by another process. The process is third party, so I cannot change it. I am looking to attach some sort of tracer to the first process so that I can see if it spawns other processes and add them to a list. Consider the following:
Program Z runs a launcher (Process A)
Process A launches Process B
Process A launches Process C
Program Z must maintain a list of the handles of Process B, and Process C, and must know when they are closed.
The business requirement for this project is that our program, Program Z, invokes a launcher (Process A) for other programs. We need to know when the other programs are closed, and so we are trying to track the handles for the additional processes which are spawned by Process A.
Is it possible to figure out what processes are spawned from a 3rd party process, and to find out when the new processes are closed?
Thanks!
Are you using VS2003 or VS2005?
ASKER
VS2003
ASKER
I am thinking that maybe what I am looking for is similar to "spying" on Process A, like I would do with Spy++?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Very interesting - so I can loop through all the processes and find the one I'm looking for. However, I have run into a small problem...
The following code should illustrate:
public void WatchProcesses()
{
Process[] procCollection = Process.GetProcessesByName ("spawnedP rocess");
foreach (Process p in procCollection)
p.Exited +=new EventHandler(p_Exited);
}
private void p_Exited(object sender, EventArgs e)
{
this.OnExit();
}
When I launch the "launcher" process (Process A) I attach to its exit event, which runs "WatchProcesses()". Since the launcher just launches the new Processes and exits, this is the correct time to find the processes it launched. Since I know the name of the launched processes, I can bind to their exit events (as in the same code). However, when I exit the launched processes, no event is fired. Why is this?
P.S. - The Processes (B and C) which are launched by Process A are not managed processes. Can I still bind to their exit events? How would I do this for VB applications (thats what processes B and C are)?
The following code should illustrate:
public void WatchProcesses()
{
Process[] procCollection = Process.GetProcessesByName
foreach (Process p in procCollection)
p.Exited +=new EventHandler(p_Exited);
}
private void p_Exited(object sender, EventArgs e)
{
this.OnExit();
}
When I launch the "launcher" process (Process A) I attach to its exit event, which runs "WatchProcesses()". Since the launcher just launches the new Processes and exits, this is the correct time to find the processes it launched. Since I know the name of the launched processes, I can bind to their exit events (as in the same code). However, when I exit the launched processes, no event is fired. Why is this?
P.S. - The Processes (B and C) which are launched by Process A are not managed processes. Can I still bind to their exit events? How would I do this for VB applications (thats what processes B and C are)?
ASKER
Note on the P.S - I mean VB6, not VB.NET...
ASKER
NEVERMIND! I figured it out - the VB processes don't normally have "enableRaisingEvents" set to true, so I had to set this first.
Now its working - thanks!
Now its working - thanks!
change this code to
foreach (Process p in procCollection)
{
p.EnableRaisingEvents;
p.Exited +=new EventHandler(p_Exited);
}
foreach (Process p in procCollection)
{
p.EnableRaisingEvents;
p.Exited +=new EventHandler(p_Exited);
}
Np, glad it's working!