使用C ++中的参数运行可执行文件并获取返回值;

时间:2009-09-30 03:30:01

标签: c++ parameters executable return-value

如何运行带有从C ++程序传递的参数的可执行文件,以及如何从中获取返回值?

这样的事情: c:\ myprogram.exe -v

3 个答案:

答案 0 :(得分:11)

便携式方式:

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

使用嵌入式引号/空格:

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

答案 1 :(得分:4)

在Windows上,如果您想要更多地控制该过程,可以使用CreateProcess来生成流程,WaitForSingleObject等待它退出,然后GetExitCodeProcess获取返回码。

此技术允许您控制子进程的输入和输出,其环境以及有关其运行方式的一些其他部分。

答案 2 :(得分:0)

问题
    如何运行带有从C ++程序传递的参数的可执行文件?
的解决方案
    使用ShellExecuteExSHELLEXECUTEINFO

问题
    你如何从中获得回报价值? 的解决方案
    使用GetExitCodeProcessexitCode

要了解的基本事项
    如果你想等到由外部exe处理的进程完成,那么需要使用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