2013-01-12 76 views
0

在C++中,可以調用/運行另一個可執行文件並從該可執行文件接收返回值(例如1或0來表示其他exe是否成功執行了其操作)?運行外部.exe並從中接收返回值

爲了簡單起見,以此示例爲例,如果我有一個名爲filelist.exe的外部控制檯.exe,它列出目錄中的所有文件並將這些文件名寫入文件。如果filelist.exe運行成功,那麼主返回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。

+1

如果您嘗試使用'CreateProcess',您將希望使用'GetExitCodeProcess'函數在進程退出後獲取返回值。 –

回答

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

外部過程的返回代碼是從使用GetExitProcess()所述Process對象中檢索。這假定您的代碼在啓動過程後正在等待完成。