2009-09-30 11 views

Odpowiedz

11

Portable sposób:

int retCode = system("prog.exe arg1 arg2 arg3"); 

z osadzonymi notowań/pomieszczeń:

int retCode = system("prog.exe \"arg 1\" arg2 arg3"); 
+0

jak sobie radzisz z parą liczniki z miejscami w nich? (np. "arg 1", "arg 2") – Bill

4

W systemie Windows, jeśli chcesz nieco więcej kontroli nad procesem, możesz użyć CreateProcess do odrodzenia procesu, WaitForSingleObject, aby czekać na jego zakończenie, i GetExitCodeProcess, aby uzyskać t on zwraca kod.

Ta technika pozwala kontrolować dane wejściowe i wyjściowe procesu potomnego, jego otoczenie oraz kilka innych informacji o jego działaniu.

0

Issue
Jak uruchomić plik wykonywalny z parametrów przekazywanych na nim z programu C++?
Rozwiązanie
Zastosowanie ShellExecuteEx i SHELLEXECUTEINFO

Issue
Jak uzyskać wartości zwracanej od niego?
Rozwiązanie
Zastosowanie GetExitCodeProcess i exitCode

Ważne rzeczy wiedzieć
Jeśli chcesz czekać, aż proces, który obsługi przez zewnętrznych exe, jest zakończona wtedy trzeba użyć WaitForSingleObject

bool ClassName::ExecuteExternalExeFileNGetReturnValue(Parameter ...) 
{ 
    DWORD exitCode = 0; 
    SHELLEXECUTEINFO ShExecInfo = {0}; 
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; 
    ShExecInfo.hwnd = NULL; 
    ShExecInfo.lpVerb = _T("open"); 
    ShExecInfo.lpFile = _T("XXX.exe");   
    ShExecInfo.lpParameters = strParameter.c_str(); 
    ShExecInfo.lpDirectory = strEXEPath.c_str(); 
    ShExecInfo.nShow = SW_SHOW; 
    ShExecInfo.hInstApp = NULL; 
    ShellExecuteEx(&ShExecInfo); 

    if(WaitForSingleObject(ShExecInfo.hProcess,INFINITE) == 0){    
     GetExitCodeProcess(ShExecInfo.hProcess, &exitCode); 
     if(exitCode != 0){ 
      return false; 
     }else{ 
      return true; 
     } 
    }else{ 
     return false; 
    } 
} 

Reference to know more detail

Powiązane problemy