因为某个小原因 自己折腾了一个小程序
一段时间内检测某个进程,如果存在则循环检测,如果不存在则自动重启(默认时间5分钟内)
多说无益 直接上代码 有需要的自己可以参考

#include <iostream>
#include <windows.h>
#include "psapi.h"
#include"stdio.h"
#include <tlhelp32.h>
#include"shellapi.h"
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#define _CRT_SECURE_NO_WARNINGS

BOOL IsExistProcess(const char* szProcessName)
{
    PROCESSENTRY32 processEntry32;
    HANDLE toolHelp32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (((int)toolHelp32Snapshot) != -1)
    {
        processEntry32.dwSize = sizeof(processEntry32);
        if (Process32First(toolHelp32Snapshot, &processEntry32))
        {
            do
            {
                int iLen = 2 * wcslen(processEntry32.szExeFile);
                char* chRtn = new char[iLen + 1];
                //转换成功返回为非负值
                wcstombs(chRtn, processEntry32.szExeFile, iLen + 1);
                if (strcmp(szProcessName, chRtn) == 0)
                {
                    return TRUE;
                }
            } while (Process32Next(toolHelp32Snapshot, &processEntry32));
        }
        CloseHandle(toolHelp32Snapshot);
    }
    //
    return FALSE;
}
int main()
{
    int i,j;
    for (i = 0,j=300;i=j;)
    {
        //std::cout << i;
        if (IsExistProcess("Steam.exe"))
        {
            printf("进程存在\n");
        }
        else{
            printf("进程不存在!\n");
            PROCESS_INFORMATION pi;
            STARTUPINFO si;
            memset(&si, 0, sizeof(si));
            si.cb = sizeof(si);
            si.wShowWindow = SW_SHOW;
            si.dwFlags = STARTF_USESHOWWINDOW;
            bool fRet = CreateProcessW(L"C:/Steam/Steam.exe", NULL, NULL, FALSE, NULL, NULL, NULL, NULL, &si, &pi);
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
        }
        Sleep(2 * 1000);
        i++;
        j--;
    }
}
最后修改:2020 年 07 月 16 日
如果觉得我的文章对你有用,请随意赞赏