2009-09-30 5 views

ответ

11

Портативный способ:

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

с внедренными котировках/пробелами:

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

как вы справляетесь с пунктом метров с пробелами в них? (например, «arg 1», «arg 2») – Bill

4

В Windows, если вы хотите немного больше контроля над процессом, вы можете использовать CreateProcess для запуска процесса, WaitForSingleObject, чтобы ждать его выхода, и GetExitCodeProcess, чтобы получить t он возвращает код.

Этот метод позволяет управлять входными и выходными данными дочернего процесса, его средой и несколькими другими фрагментами о том, как он работает.

0

Выпуск
Как запустить исполняемый файл с параметрами, передаваемыми на него из программы на C++?
Решение
Использование ShellExecuteEx и SHELLEXECUTEINFO

Выпуск
Как получить возвращаемое значение из него?
Решение
Использования GetExitCodeProcess и exitCode

Основных вещи, чтобы знать
Если вы хотите ждать, пока процесс, который обработки внешнего еха, закончено, то нужно использовать 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

 Смежные вопросы

  • Нет связанных вопросов^_^