//启动新进程
inline int CreateNewProcess(LPCSTR pszExeName/*程序的绝对路径*/, PROCESS_INFORMATION& piProcInfoGPS/*返回进程信息*/)
{
STARTUPINFO siStartupInfo;
SECURITY_ATTRIBUTES saProcess, saThread;
ZeroMemory( &siStartupInfo, sizeof(siStartupInfo) );
siStartupInfo.cb = sizeof(siStartupInfo);
saProcess.nLength = sizeof(saProcess);
saProcess.lpSecurityDescriptor = NULL;
saProcess.bInheritHandle = true;
saThread.nLength = sizeof(saThread);
saThread.lpSecurityDescriptor = NULL;
saThread.bInheritHandle = true;
BOOL bRet = ::CreateProcess( NULL, (LPTSTR)pszExeName, &saProcess, &saThread, false,
CREATE_DEFAULT_ERROR_MODE | BELOW_NORMAL_PRIORITY_CLASS, NULL, NULL, &siStartupInfo, &piProcInfoGPS );//低于普通的优先级
if (!bRet)
{
DWORD dwError = GetLastError();
TTRACE_EX(XH_LOG_TYPE_ERROR, _T("TID[%u], %s: CreateProcess failed, LastError[%u] \r\n"), GetCurrentThreadId(), __FUNCTION__, dwError);
}
else
{
TTRACE_EX(XH_LOG_TYPE_WARNNING, _T("TID[%u], %s: CreateProcess success, PID[%u] \r\n"),
GetCurrentThreadId(), __FUNCTION__, piProcInfoGPS.dwProcessId);
}
return bRet;
}