Как мне проверить, запущен ли исполняемый файл в C?

Я хочу убедиться, что helper.exe работает, и наоборот.

Я ищу что-то вроде: if (not running helper.exe) { //fatal error here }

к вашему сведению, я использую Windows Я ничего не пробовал, кроме поиска в Google, который не дал мне ответа.

🤔 А знаете ли вы, что...
C предоставляет возможность работы с низкоуровневыми аппаратными ресурсами, такими как порты ввода-вывода и регистры устройств.


70
1

Ответ:

Решено

Обратите внимание: это непереносимый код Windows, поскольку ОП пометил окна и сообщил, что использует окна.

Этот код скомпилирован и протестирован мной только что. Output: на самом деле является копированием из окна консоли.

ЦЕЛЬ: посмотреть, запущен ли процесс, вернуть Process ID и отобразить имя процесса. В этом случае код проверяет, работает ли msedge.exe, и отображает Process ID (PID).

Метод: выполняет поиск по всем запущенным процессам, выполняя строку. поиск нужного процесса.

#define _WIN32_WINNT 0x0501   /* WinXP minimum platform */
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>


/*--------------------------------------------
    FindProcessId()
*--------------------------------------------*/
DWORD FindProcessId(char *processName)
{
    PROCESSENTRY32 processInfo;
    HANDLE processesSnapshot = 
        CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if ( processesSnapshot == INVALID_HANDLE_VALUE )
        return 0;

    processInfo.dwSize = sizeof(processInfo);

    Process32First(processesSnapshot, &processInfo);

    printf("FindProcessId(%s) comp:  %s\n",processName, processInfo.szExeFile); 
    if ( !_stricmp(processName, processInfo.szExeFile) )
    {
        CloseHandle(processesSnapshot);
        return processInfo.th32ProcessID;
    }

    while ( Process32Next(processesSnapshot, &processInfo) )
    {
        printf("FindProcessId(%s) comp:  %s\n",processName, processInfo.szExeFile); 
        if ( !_stricmp(processName, processInfo.szExeFile) )
        {
            CloseHandle(processesSnapshot);
            return processInfo.th32ProcessID;
        }
    }
    CloseHandle(processesSnapshot);
    return 0;
}

/*-------------------------------------
    main()
*------------------------------------*/
int main()
{
    DWORD PID=0; 
    PID = FindProcessId("msedge.exe");
    printf("PID = %lu\n", PID);
    system("pause");
    return 0;
}

Выход:


    ...
    ...
    FindProcessId(msedge.exe) comp:  svchost.exe
    FindProcessId(msedge.exe) comp:  svchost.exe
    FindProcessId(msedge.exe) comp:  splwow64.exe
    FindProcessId(msedge.exe) comp:  svchost.exe
    FindProcessId(msedge.exe) comp:  taskhostw.exe
    FindProcessId(msedge.exe) comp:  msedge.exe
    PID = 12156
    Press any key to continue . . .