我想让一个程序监控另一个程序的运行,如果那个程序崩溃掉,这个程序就会自动的结束那个程序,并且重新启动那个程序。
   问题:
    1。通过什么方法确信其他程序是死掉的(比如说两个程序采取某种通信手段,如消息机制,或者共享内存等)。
    2。如何结束掉其他程序。

解决方案 »

  1.   

    www.vckbase.com有三线程保护的例子
      

  2.   

    首先要有这个进程的id用OpenProcess打开这个进程的HANDLE然后WaitForSingleObject (hProc, INFINITE);返回时,说明这个进程结束了。这时候你就可以重新启动这个进程了。结束其他程序,可以OpenProcess,然后TerminateProcess
      

  3.   

    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);
      

  4.   

    监控进程可以通过CreateProcess(...)加载被监控进程, 然后定时给它发送一个自定义的查询消息, 被监控进程收到查询消息后,发送一个应答消息, 如果监控进程发了查询消息而没有收到应答消息, 则被监控进程可能已经死掉, 可以用TerminateProcess(...)结束它,然后再重新加载!