STARTUPINFO *si = new STARTUPINFO[nProcNum];
PROCESS_INFORMATION *pi = new PROCESS_INFORMATION[nProcNum];
int nCurNum = 0;
string cPath;
EnterCriticalSection(&m_mapCs);
std::vector<ExeInfo>::iterator it = m_vctTask.begin(); // 启动任务
for(; it!=m_vctTask.end(); it++)
{
// 如果是子目录
if(strlen(it->TaskPath) > 0)
{
cPath = g_cRootDir + "\\" + it->TaskPath ;
SetCurrentDirectory(cPath.c_str());
sprintf(cCmdLine, "%s\\%s\\%s", g_cRootDir.c_str(),it->TaskPath,it->ExeName);
}
// 否则在当前目录下
else
{
sprintf(cCmdLine, "%s\\%s", g_cRootDir.c_str(),it->ExeName);
}
ZeroMemory( &si[nCurNum], sizeof(si[nCurNum]) );
si[nCurNum].cb = sizeof(si[nCurNum]);
ZeroMemory( &pi[nCurNum], sizeof(pi[nCurNum]) );
// 设置启动最小化
si[nCurNum].dwFlags = STARTF_USESHOWWINDOW;
si[nCurNum].wShowWindow = SW_MINIMIZE;
if(! ::CreateProcess (NULL, cCmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si[nCurNum],&pi[nCurNum]))
{
//error
sprintf(szLogBuf, "---%s(%d):[%s]启动[Process%d]失败,错误代码%d,请检查配置文件 \r\n", __FILE__, __LINE__, __FUNCTION__, nCurNum+1,GetLastError());
LOG4CPLUS_ERROR(m_oLog, szLogBuf);
}
SetCurrentDirectory(g_cRootDir.c_str());
nCurNum ++;
Sleep(100);
}//end for 启动任务