运行外部 .exe 并从中接收返回值

Posted

技术标签:

【中文标题】运行外部 .exe 并从中接收返回值【英文标题】:Run external .exe and receive return value from it 【发布时间】:2013-01-12 04:38:02 【问题描述】:

在 C++ 中是否可以调用/运行另一个可执行文件并从该可执行文件接收返回值(例如 1 或 0 表示其他 exe 是否成功执行其操作)?

为简单起见,举个例子,如果我有一个名为 filelist.exe 的外部控制台 .exe,它列出了目录中的所有文件并将这些文件名写入文件。如果 filelist.exe 运行成功,则 main 返回 1,否则返回 0。

如果我使用以下代码运行 filelist.exe,有​​没有办法从 filelist.exe 获取返回值?

int res = system("filelist.exe dirPath");

// Maybe the windows function CreateProcess() allows filelist.exe to return
// a value to the currently running application?
CreateProcess();

注意我不打算创建一个简单的控制台应用程序来列出目录中的文件我正在尝试创建一个控制台应用程序来检查用户是否具有有效版本的 3rd 方程序,如果他们确实有则返回 1有效版本,如果不是,则为 0。

【问题讨论】:

如果您尝试使用CreateProcess,您将希望在进程退出后使用GetExitCodeProcess 函数获取返回值。 【参考方案1】:

一个例子如下:

    res = CreateProcess(
        NULL,                //  pointer to name of executable module  
        commandLine,         //  pointer to command line string  
        NULL,                //  pointer to process security attributes  
        NULL,                //  pointer to thread security attributes  
        TRUE,                //  handle inheritance flag  
        0,                   //  creation flags  
        NULL,                //  pointer to new environment block  
        NULL,                //  pointer to current directory name  
        &StartupInfo,        //  pointer to STARTUPINFO  
        &ProcessInfo         //  pointer to PROCESS_INFORMATION  
      );

    if (!res)
      //  process creation failed!
      
        showError(commandLine);
        retVal = 1;
      
    else if (waitForCompletion)
      
        res = WaitForSingleObject(
                ProcessInfo.hProcess,  
                INFINITE      // time-out interval in milliseconds  
                );  
        GetExitCodeProcess(ProcessInfo.hProcess, &exitCode);

        retVal = (int)exitCode;
      

使用GetExitProcess()Process 对象中检索外部进程的返回码。这假设您的代码在启动过程后正在等待完成。

【讨论】:

【参考方案2】:

是的,您将启动另一个进程并运行可执行文件。你问的是inter-process communication,通常在像你这样的场景中通过signals或pipes实现。

【讨论】:

以上是关于运行外部 .exe 并从中接收返回值的主要内容,如果未能解决你的问题,请参考以下文章

通过字符串运行一堆方法并接收一个值

如何从exe获取返回值并重新启动它

外部应用在不匹配时意外返回列NOT NULL

SpringBoot 异步调用方法并接收返回值

SpringMVC+ActiveMQ发送消息并接收返回值的问题

VB关于Shell函数的返回值