如何链接两个单独的.exe文件,这样结束一个进程会杀死这两个文件?

时间:2019-04-19 19:51:58

标签: c++ batch-file exe

我有两个要一起运行的可执行文件: main.exeside.exe

main.exe文件是我无法修改的专有源代码,但是它利用修改来补充我可以修改的side.exemain.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

如何在源文件为 cpp 的批处理文件或side.exe中链接这两个文件?

1 个答案:

答案 0 :(得分:0)

根据user4581301的评论。这是我生成的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,并且是监视Main.exe的Qt GUI状态机,因此在状态更改后,我将运行以下程序:

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;然而, 这不会在运行Main.exe时运行Side.exe。我的问题中提到的其他方法似乎可行。