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

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

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

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

Чтобы что-то уточнить, отредактируйте свой пост. Вы не должны ничего комментировать самому себе. Кроме того, добавленный вами тег Windows сообщает нам, что вы используете Windows.

Ken White 17.08.2024 02:39

@KenWhite мб, я правда только что подписался на переполнение стека, чтобы задать этот вопрос, лол

some guy who likes C 17.08.2024 02:48

Ну, оставайся ненадолго. Перейдите по предложенной дублирующей ссылке в комментарии 2. Если это не отвечает на ваш вопрос, отредактируйте этот вопрос и объясните, почему. Скоро прочитайте страницу О и ссылки, описывающие Как задать вопрос и Как создать минимальный полный воспроизводимый пример. У тебя все получится.

David C. Rankin 17.08.2024 02:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 . . .

у него проблема с ProcessInfo: «аргумент типа «WCHAR *» (он же «wchar_t *») несовместим с параметром типа «const char *»

some guy who likes C 17.08.2024 06:11

@someguywholikesC -- привет. Надеюсь, это не сделает его непригодным для использования. Что касается меня, я компилирую с отключенным UNICODE, и, возможно, поэтому я не получаю ошибок или предупреждений при компиляции? Я думаю, что для исправления вы можете: 1.) привести строку к wchar ( также это) или 2.) отключить UNICODE. Не уверен, кто из них сделает это за вас. Спасибо, что выбрали мой ответ, и я надеюсь, что вы сможете его использовать.

greg spears 17.08.2024 19:41

Другие вопросы по теме