程序服务器端进程总是崩溃,所以我想弄个监视程序,一旦他不在了,就启动。谁有进程监视程序呀

解决方案 »

  1.   

    楼主看看这个,符合你的要求么?
    int MyWatch(char * thread_name)
    {
        PROCESSENTRY32 pe32;
        char * mychar;
        BOOL bstart=TRUE;
        HANDLE hProcessSnap;
        while(1)
        {
            pe32.dwSize=sizeof(pe32);
            hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
            if(hProcessSnap==INVALID_HANDLE_VALUE)
            {
                printf("CreateToolhelp32Snapshot调用失败!\n");
                return -1;
            }
            //遍历进程快照。轮流显示每个进程的信息    
            bstart = TRUE;
            BOOL bMore=::Process32First(hProcessSnap,&pe32);
            while(bMore)
            {
                USES_CONVERSION; //启用宏命令标记    
                mychar = W2A(pe32.szExeFile);
                if(0==strcmp(thread_name,mychar)) //比较你的进程名字是否相同,判断是否进程在启动
                {
                    printf("你的程序在运行!");
                    bstart = FALSE;
                    break;
                }
    //                     printf("进程名称:%s\n",W2A(pe32.szExeFile));
    //                     printf("进程ID号:%u\n\n",pe32.th32ProcessID);        
                bMore=::Process32Next(hProcessSnap,&pe32);
            }        if(bstart)
            {
                ShellExecute(0, _T("open"), _T("D:\\result.txt"),NULL,NULL,SW_SHOWNORMAL); //启动你要的exe文件,D:\\result.txt是我自己的测试
            }
                    Sleep(5000);//5秒监测一次    }
        //清除snapshot对象
        ::CloseHandle(hProcessSnap);    return 0;
    }