bool ExecuteExe( LPCTSTR strExePath, LPCTSTR strParam )
{
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
StartupInfo.wShowWindow = SW_SHOW;
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.cb = sizeof(StartupInfo);
TCHAR szCmd[512];
_stprintf(szCmd, _T("%s %s"), strExePath, strParam);
DWORD dwExitCode = STILL_ACTIVE;
if(!CreateProcess(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo))//有可能执行不成功,如:管理员权限才能执行,否则错误740...
{
int nCode = GetLastError();
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
//CreateProcess执行不成功,使用ShellExecuteEx继续执行
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = strExePath;
ShExecInfo.lpParameters = strParam;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
if (ShellExecuteEx(&ShExecInfo))
{
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
return true;
}
return false;
}
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hThread);
GetExitCodeProcess(ProcessInfo.hProcess, &dwExitCode);
CloseHandle(ProcessInfo.hProcess);
return true;
}