Как связать два отдельных файла .exe таким образом, чтобы в результате завершения одного процесса погибли оба? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть два исполняемых файла, которые я хотел бы запустить вместе: main.exe & side.exe

Файл main.exe является частным исходным кодом, который я не могу изменить, но он использует модификацию дляхвали это, side.exe, что я могу изменить.Когда main.exe убит, side.exe продолжает работать.Я хотел бы создать метод для связывания двух исполняемых файлов, чтобы при запуске main.exe также выполнялось side.exe, а при закрытии main.exe закрывалось side.exe.

В настоящее время я пробовал использовать простой пакетскрипт для запуска двух исполняемых файлов.Это работает для запуска обоих исполняемых файлов, но у него нет последнего способа закрытия обоих файлов при выходе main.exe:

script.bat :

@echo off
c:\path\to\first\exe\main.exe
c:\path\to\second\exe\side.exe

Как связать два файла в пакете или side.exe с исходным кодом в cpp ?

1 Ответ

0 голосов
/ 22 апреля 2019

Согласно комментарию пользователя 4581301.Вот код C ++, который я сгенерировал.

Использование CreateProcess :

Следующий код компилируется в Side.exe и запускает Main.exe, если онеще не запущен.

if (!FindProcessId(L"Main.exe")) {
    LPTSTR szCmdline = _tcsdup(TEXT("\"C:\\Program Files (x86)\\Path\\To\\Main\""));
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si)); //Use default startup info
    ZeroMemory(&pi, sizeof(pi));
    CreateProcess(NULL,
            szCmdline,
            NULL,
            NULL,
            FALSE,
            CREATE_BREAKAWAY_FROM_JOB,
            NULL,
            NULL,
            &si,
            &pi
        );
    }

Поскольку мой конкретный проект включает внедрение DLL и представляет собой конечный автомат конечного пользователя Qt, контролирующий Main.exe, при изменении состояния я запустил бы это:

if (!dllInjector.GetProcessID(MAIN_PROCESS_NAME))
    {
        // Code ommitted for brevity
        OnExitClick(); 
        // Simulates exit click "QApplication::exit();"
    }

, которыйзакроет Side.exe, если Main.exe не будет обнаружен.

Таким образом, поведение выглядит следующим образом: Запуск Side.exe запускает Main.exe;закрытие Main.exe закрывает Side.exe;однако это не запускает Side.exe при запуске Main.exe.Другие подходы, прокомментированные в моем вопросе, кажутся жизнеспособными.

...