rohit7373 Ответов: 1

Мне нужно 1.exe, 2.exe чтобы каждые 10 секунд проверять, работает он или нет, а если не работает, то запустить его.


_WIN32_WINNT 0x0500 // define needed to use GetConsoleWindow() function
#include <windows.h>
#include <tlhelp32.h>
#include <string.h>
 
int main()
{    
    BOOL is_running = 0;
    DWORD pid = 0;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
 
    //start of the checking loop, check happens once in every 10 seconds
    while(1){ 
        //take a snapshot of windows running processes
        HANDLE hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
        Process32First(hProcessSnapshot, &pe32);
 
        //compare the name of each process in the process list with "sleep.exe"
        while (Process32Next(hProcessSnapshot, &pe32)) {
            if (!strcmp("1.exe", pe32.szExeFile)) {
                is_running = 1; //change is_running status if name matches
                break;
            }
        }
 
        if(!is_running) system("start 1.exe"); //start the process if it's not running
        is_running = 0; //restore is_running status
        Sleep(10000); //sleep for 10 seconds
       
        while (Process32Next(hProcessSnapshot, &pe32)) {
            if (!strcmp("2.exe", pe32.szExeFile)) {
                is_running = 1; //change is_running status if name matches
                break;
            }
        }
 
        if(!is_running) system("start 2.exe"); //start the process if it's not running
        is_running = 0; //restore is_running status
        Sleep(10000); //sleep for 10 seconds        
    }
 
    return 0;
}


Что я уже пробовал:

хотите упростить мой вопрос

Richard Deeming

Похоже на то, что сделал бы вирус.

1 Ответов

Рейтинг:
1

Richard MacCutchan

while(1){
        HANDLE hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
// ...
        HANDLE hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

Вы пытаетесь переопределить одну и ту же переменную. Удалить тип (HANDLE) от второго случая. Или, если вам нужны два таких дескриптора, переименуйте один из них.


rohit7373

Пытался изменить или исправить его, но все равно не работает так, как я хочу. Мне нужно SLEEP.exe,notpad.exe чтобы каждые 10 секунд проверять, работает он или нет, а если не работает, то запустить его.

0x01AA

а) опечатка notpad против Блокнота
если(!система is_running) ("notpad.exe начать ");
б.) колпачки против Без Шапки
strcmp("SLEEP.exe", pe32.szExeFile....
Я предлагаю сделать сравнение _not_ чувствительным к регистру.

Richard MacCutchan

И что происходит, когда вы пытаетесь? Мы не можем догадаться, что не работает.

KarstenK

вам лучше использовать полный путь в команде start.