如何判断子进程已启动

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值