if(!CreateProcess("c:\\winnt\\system32\\notepad.exe", NULL, NULL,NULL,FALSE,0,NULL, NULL,&StartupInfo,&ProcessInfo))
{
TRACE(" The process could not be started.");
}
else{
::WaitForInputIdle (ProcessInfo.hProcess, 3000);
if(OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
PROCESS_VM_WRITE,FALSE,ProcessInfo.dwProcessId))
{
TRACE(" start a new thread success.");
}
else{
TRACE(" start a new thread fail.");
}
}
KillTimer(100);
}
if(nOK != NULL)
{
TerminateProcess(nOK,0);
OnSaveLog(" kill a died thread."); if(!CreateProcess("ssfCntrl.exe", NULL, NULL,NULL,FALSE,0,NULL, NULL,&StartupInfo,&ProcessInfo))
{
OnSaveLog(" The process could not be started.");
}
else{::WaitForInputIdle (ProcessInfo.hProcess, 3000);
if(OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATION|PROCESS_VM_READ|
PROCESS_VM_WRITE,FALSE,ProcessInfo.dwProcessId))
{
OnSaveLog(" start a new thread success.");
}
else{ OnSaveLog(" start a new thread fail.");}
}
}
...
可以看到执行到了start a new thread success
ssfCntrl.exe没有问题。这段代码在CMainFrame的oncreate函数体里面执行很正常。放到timer里执行到start a new thread success.了。说明代码是正确的,但是ssfCntrl.exe的窗体没有出现,也没有相应的进程。
所以应该是在ontimer处理的方式有问题。
本意是想在监视一个程序的运行情况,发现他没有反应则杀掉并重新启动。