如何使一个程序监控另一个程序,如果崩溃就自动重启,分不是问题 我想让一个程序监控另一个程序的运行,如果那个程序崩溃掉,这个程序就会自动的结束那个程序,并且重新启动那个程序。 问题: 1。通过什么方法确信其他程序是死掉的(比如说两个程序采取某种通信手段,如消息机制,或者共享内存等)。 2。如何结束掉其他程序。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 www.vckbase.com有三线程保护的例子 首先要有这个进程的id用OpenProcess打开这个进程的HANDLE然后WaitForSingleObject (hProc, INFINITE);返回时,说明这个进程结束了。这时候你就可以重新启动这个进程了。结束其他程序,可以OpenProcess,然后TerminateProcess STARTUPINFO startInfo; ZeroMemory(&startInfo,sizeof(startInfo)); startInfo.cb = sizeof(STARTUPINFO); startInfo.lpReserved = NULL; startInfo.lpTitle = NULL; startInfo.lpDesktop = NULL; startInfo.dwX = 0; startInfo.dwY = 0; startInfo.dwXSize = 0; startInfo.dwYSize = 0; startInfo.dwXCountChars = 0; startInfo.dwYCountChars = 0; startInfo.dwFlags = STARTF_USESTDHANDLES; startInfo.wShowWindow = 0; startInfo.lpReserved2 = NULL; startInfo.cbReserved2 = 0; startInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); startInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); startInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); PROCESS_INFORMATION procinfo; ZeroMemory(&procinfo,sizeof(procinfo)); CreateProcess(NULL,"那个exe",NULL,NULL,TRUE,0, NULL,NULL,&startInfo,&procinfo); DWORD dPid = procinfo.dwProcessId; HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPid);2.::TerminateProcess(hProcess,dErr); 监控进程可以通过CreateProcess(...)加载被监控进程, 然后定时给它发送一个自定义的查询消息, 被监控进程收到查询消息后,发送一个应答消息, 如果监控进程发了查询消息而没有收到应答消息, 则被监控进程可能已经死掉, 可以用TerminateProcess(...)结束它,然后再重新加载! 询问关于简单画线的问题 Windows Media Player控件播放的URL中如何加入cookie? 紧急:怎么把 cbitmap 保存成jpg文件 只使用内核API,如何将文件路径在\Device\HarddiskVolume? C:\两种格式间相互转换? 难道这些代码有内存泄露? BT 下载问题 帮我调试代码 ? 如何在程序中将自己的代码段写入文件? 如何生成.pdf文档 急求关于如何使用CXPButton,感激不尽 如何在Visual C++程序中向Windows注册一个ActiveX控件 com的简单问题,新手发问, 防火墙会不会对C/S程序造成影响?
ZeroMemory(&startInfo,sizeof(startInfo));
startInfo.cb = sizeof(STARTUPINFO);
startInfo.lpReserved = NULL;
startInfo.lpTitle = NULL;
startInfo.lpDesktop = NULL;
startInfo.dwX = 0;
startInfo.dwY = 0;
startInfo.dwXSize = 0;
startInfo.dwYSize = 0;
startInfo.dwXCountChars = 0;
startInfo.dwYCountChars = 0;
startInfo.dwFlags = STARTF_USESTDHANDLES;
startInfo.wShowWindow = 0;
startInfo.lpReserved2 = NULL;
startInfo.cbReserved2 = 0;
startInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
PROCESS_INFORMATION procinfo;
ZeroMemory(&procinfo,sizeof(procinfo));
CreateProcess(NULL,"那个exe",NULL,NULL,TRUE,0,
NULL,NULL,&startInfo,&procinfo);
DWORD dPid = procinfo.dwProcessId;
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPid);2.
::TerminateProcess(hProcess,dErr);