我想在一个程序启动的时候,另外启动一个进程,来监视该程序,如果程序被关掉,就重新启动.我用的是命名管道实现的,就是调不过去,请各位高手帮我写一个,急!

解决方案 »

  1.   

    #include "tlhelp32.h"DWORD ProcesstoPid(char *pid) //查找指定进程的PID(Process ID)
    {
    HANDLE hProcessSnap=NULL;
    char buffer[MAX_PATH];
    PROCESSENTRY32 pe32={0};
    int i;
    hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //打开进程快照
    if(hProcessSnap==(HANDLE)-1)
    {
    printf("CreateToolhelp32Snapshot() Error: %d",GetLastError());
    return 0;
    }
    pe32.dwSize=sizeof(PROCESSENTRY32);
    if(Process32First(hProcessSnap,&pe32)) //开始枚举进程
    {
    do
    {
    strcpy(buffer,pe32.szExeFile);
    for(i=strlen(buffer);i>0;i--) //截取进程名
    if(buffer[i]=='\\')
    break;
    if(!stricmp(pid,&buffer[i])) //判断是否和提供的进程名相等,是,返回进程的ID
    return pe32.th32ProcessID;
    }
    while(Process32Next(hProcessSnap,&pe32)); //继续枚举进程
    }
    else
    {
    printf("Process32First() Error: %d",GetLastError());
    return 0;
    }
    CloseHandle(hProcessSnap); //关闭系统进程快照的句柄
    return 0;
    }int main()
    {
    while(1)
    {
    Sleep(10000)
    if(ProcesstoPid(我的程序.exe)==0)
    {
        ShellExecute或者CreateProcess
    }
    }
    }
      

  2.   

    由监控的进程来启动需要运行的进程,然后用waitforsingleobject来等待createprocess返回的进程句柄,然后重起。
      

  3.   

    获得进程handle,然后判断是否关闭,关了,守护进程启动它
      

  4.   

    用你的监控进程来启动被监控的进程,如:
    while(1)
    {
      h=CreateProcess(被监控进程);
      WaitForSingle(h);
    }
    当进程被关闭时,WaitForSingle返回,重新启动进程。
      

  5.   

    要判断是否停止响应的话,如果进程有窗口界面就好办,可以用sendmessagetimeout发个窗口消息,超时的话就是停止响应了。
      

  6.   

    使用QueryServiceStatus查询服务状态
      

  7.   

    LPPROCESS_INFORMATION pi;
      HWND hwin;
      CreateProcess(被监控进程,...,pi);
      hwin=findwindow(被监控进程一个窗口名);
      DWORD dexitcode;
      do
      {
        //
        if(Sendmessagetimeout(hwin,WM_GETTEXT,...)==false)
        {
           getlasterror()
           //判断是否有反映
           ...
        }
        GetExitCodeProcess(pi.hprocess,dexitcode);
      }
      While(dexitcode==STILL_ACTIVE)
    }
      

  8.   

    关键是两个进程要相互监视.
    使用while又太浪费资源了.
    可以使用socket,让两个进程建立起TCP连接,在OnClose事件中重新创建另一个进程
      

  9.   

    建议使win32 service,不过被监视的程序只能是控制台应用程序.