BOOL ShellExecServer(
DWORD &dwProcessId, //进程号
int iNum // 服务号
)
{
TCHAR sFilename[_MAX_PATH];
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFname[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
GetModuleFileName(NULL, sFilename, _MAX_PATH);
_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);
CString rVal(CString(sDrive) + CString(sDir));
if (rVal.Right(1) != _T('\\')) rVal += _T("\\");
rVal += "BHEasyADVideo.exe";
CString sParam;
if(iNum<0)
{
sParam.Format("stop");
}
else
{
sParam.Format("start %u",iNum);
}
// hInstance = ShellExecute(NULL, NULL, rVal, sParam, NULL, SW_HIDE);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = si.dwFlags | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
rVal += " ";
rVal += sParam;
if(!CreateProcess(NULL, rVal.GetBuffer(0), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
return FALSE;
dwProcessId = pi.dwProcessId;
// 等待外部进程启动, 最长1000ms
DWORD dwTick = GetTickCount();
HANDLE hRun = NULL;
while (!(hRun = OpenProcess(SYNCHRONIZE, 0, dwProcessId)))
{
Sleep(1);
if (GetTickCount() - dwTick > 1000)
{
break;
}
}
if (NULL != hRun)
{
CloseHandle(hRun);
}
return TRUE;
}
DWORD &dwProcessId, //进程号
int iNum // 服务号
)
{
TCHAR sFilename[_MAX_PATH];
TCHAR sDrive[_MAX_DRIVE];
TCHAR sDir[_MAX_DIR];
TCHAR sFname[_MAX_FNAME];
TCHAR sExt[_MAX_EXT];
GetModuleFileName(NULL, sFilename, _MAX_PATH);
_tsplitpath(sFilename, sDrive, sDir, sFname, sExt);
CString rVal(CString(sDrive) + CString(sDir));
if (rVal.Right(1) != _T('\\')) rVal += _T("\\");
rVal += "BHEasyADVideo.exe";
CString sParam;
if(iNum<0)
{
sParam.Format("stop");
}
else
{
sParam.Format("start %u",iNum);
}
// hInstance = ShellExecute(NULL, NULL, rVal, sParam, NULL, SW_HIDE);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = si.dwFlags | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
rVal += " ";
rVal += sParam;
if(!CreateProcess(NULL, rVal.GetBuffer(0), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
return FALSE;
dwProcessId = pi.dwProcessId;
// 等待外部进程启动, 最长1000ms
DWORD dwTick = GetTickCount();
HANDLE hRun = NULL;
while (!(hRun = OpenProcess(SYNCHRONIZE, 0, dwProcessId)))
{
Sleep(1);
if (GetTickCount() - dwTick > 1000)
{
break;
}
}
if (NULL != hRun)
{
CloseHandle(hRun);
}
return TRUE;
}