Jak uruchomić plik wykonywalny z parametrami przekazanymi z programu C++ i jak uzyskać z niego wartość zwracaną?Uruchamianie pliku wykonywalnego z parametrami w C++ i uzyskanie wartości zwracanej;
coś takiego: c: \ myprogram.exe -v
Jak uruchomić plik wykonywalny z parametrami przekazanymi z programu C++ i jak uzyskać z niego wartość zwracaną?Uruchamianie pliku wykonywalnego z parametrami w C++ i uzyskanie wartości zwracanej;
coś takiego: c: \ myprogram.exe -v
Portable sposób:
int retCode = system("prog.exe arg1 arg2 arg3");
z osadzonymi notowań/pomieszczeń:
int retCode = system("prog.exe \"arg 1\" arg2 arg3");
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.
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;
}
}
jak sobie radzisz z parą liczniki z miejscami w nich? (np. "arg 1", "arg 2") – Bill