/**
* @brief 以不显示窗口的方式来执行特定程序
*
* detail...
*
* @author jince-007
* @date 2009-9-5
* @return int
* @param std::string exe_str 要调用的程序
* @param std::string cmd_str 要传递到程序的参数
* @see
* @exception
*/
int do_cmd(std::string exe_str, std::string cmd_str)
{
SHELLEXECUTEINFOA ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFOA);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = "open";
ShExecInfo.lpFile = exe_str.c_str();
ShExecInfo.lpParameters = cmd_str.c_str();
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;
if( ShellExecuteExA(&ShExecInfo) != true )
{
return -1;
}
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
DWORD dwExitCode;
if( GetExitCodeProcess(ShExecInfo.hProcess, &dwExitCode) != true )
{
CloseHandle(ShExecInfo.hProcess);
return -1;
}
CloseHandle(ShExecInfo.hProcess);
if ( 0 == dwExitCode )
{ return 0; }
else
{ return GetLastError(); }
}