自己开发的程序为A。在A中启动进程B,B又启动进程C,之后B退出,C继续运行,如何判断进程C何时结束,是否正常结束。
注:B和C都是第三方软件。如何在A中完成上述功能。
注:B和C都是第三方软件。如何在A中完成上述功能。
解决方案 »
- CShockwaveflash, 这个类求教
- 比较复杂的问题:如何得到别的进程中的ListCtrl控件的文字
- 请问如何在MFC里用OpenGL画出一条直线?
- VC基础问题,请高手回答!!!!
- 出错,出错
- 我是新新手,放分交朋友
- 在CComboBoxEx里显示64x32位图问题
- CFile exception: badSeek, File Unknown, OS error information = 13 这个错误是因为什么造成的
- 寻找MTS(Microsoft Transaction Server)资料的网址,谢谢!
- Debud Assertion Failed! 如何解
- 一台机器怎么编写基于internet的p2p程序比较好呢?
- 刚才没问清,继续问,关于动态数组...的问题
没有其它办法来确定C是由A进程间接生成的,特别是如果进程用CreateProcess(..., CREATE_NEW_PROCESS_GROUPCREATE_NEW_PROCESS_GROUP,...)就基本无望了。
如果同时有四个C,分别是A1->B1->C1、A2->B2->C2、B3->C3、C4,恐怕微软自己也没办法搞清楚C1, C2, C3, C4 哪个是由A1间接生成,哪个是由A2间接生成的了。
if (WAIT_OBJECT_0 == dwRet)//如果进程B结束
{
//枚举系统内所有进程,查找每个进程的父进程,如果父进程ID为ProcessB_ID,
说明该进程为C,在用WaitForSingleObject等待进程C结束,并用GetExitCodeProcess
获取进程C退出的返回值,判断是否正常退出。如果C在生成D或更多进程,那就比较复杂
了。
}
1、给B注入一个hook, hook掉B的CreateProcessW,当B创建C后让你的A用DuplicateObject复制一份C的Handle,你就可以通过WaitForSingleObject等待C结束了
2、更简单的方法:你的A用DEBUG_PROCESS标志创建B进程,然后你可以通过调试事件CREATE_PROCESS_DEBUG_EVENT/EXIT_PROCESS_DEBUG_EVENT事件得知C的创建和结束