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

时间:2013-01-12 04:38:03

标签: c++ windows command-line console

在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();

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

2 个答案:

答案 0 :(得分:2)

是的,您将启动另一个进程并运行可执行文件。您提出的问题称为inter-process communication,通常通过像您这样的方案中的signalspipes来实现。

答案 1 :(得分:2)

示例如下:

    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;
      }

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