STDMETHODIMP
CExEditor::StartProcess(BSTR bstrCommand, BSTR bstrValue, BOOL bModal, VARIANT *pvarReturn)
{
USES_CONVERSION; PROCESS_INFORMATION ProcessInformation;
STARTUPINFO StartUpInfo;
StartUpInfo.cb = sizeof(StartUpInfo);
StartUpInfo.lpReserved = NULL;
StartUpInfo.lpDesktop = NULL;
StartUpInfo.lpTitle = NULL;
StartUpInfo.cbReserved2 = 0;
StartUpInfo.lpReserved2 = NULL;
StartUpInfo.dwFlags = 0; //HANDLE hTerminate = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("ExEditorProcess"));
HANDLE hTerminate = CreateEvent(NULL, TRUE, FALSE, _T("ExEditorProcess")); CComBSTR bstrCmd = bstrCommand;
CreateProcess(NULL,OLE2T(bstrCmd.m_str),NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&StartUpInfo,&ProcessInformation);
HANDLE hWaitfor[2];
hWaitfor[0] = ProcessInformation.hProcess;
hWaitfor[1] = hTerminate; DWORD dwRet = WaitForMultipleObjects(2, hWaitfor, FALSE, INFINITE);
//DWORD dwRet = MsgWaitForMultipleObjects(2, hWaitfor, FALSE, INFINITE, 0);
if (dwRet == WAIT_FAILED) {
//懸偪幐攕偺応崌
//bReturn = FALSE;
//goto WatchExe_End;
pvarReturn->vt = VT_BOOL;
pvarReturn->boolVal = FALSE;
CloseHandle(hTerminate);
return S_OK;
}
CloseHandle(hTerminate);
//CComBSTR bstrRet = L"Schema2.bmp";
CComBSTR bstrRet = bstrValue;
pvarReturn->vt = VT_BSTR;
pvarReturn->bstrVal = bstrRet.Copy();
/*
pvarReturn->vt = VT_BOOL;
pvarReturn->boolVal = FALSE;
*/ return S_OK;
}

解决方案 »

  1.   

    1启动另外一个进程。
    2等待该进程结束,或者是某个进程发出了Terminate事件(hTerminate )
    3退出
      

  2.   

    同LS开户另一进程处理...直到他处理完后才结束
    用Event来互斥,体现同步为何不用线程咧?
      

  3.   

    StartProcess(BSTR bstrCommand, BSTR bstrValue, BOOL bModal, VARIANT *pvarReturn)看这个基本就心里有普了 ...
      

  4.   

    1启动另外一个进程。
    2等待该进程结束,或者是某个进程发出了Terminate事件(hTerminate )
    3退出