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;
}
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;
}
解决方案 »
- 用DirectShow还是DirectDraw绘图?
- COM DLL导出表中没有DllRegisterServer,怎么才能得到COM DLL对应的typelib
- VC++获取坐标问题
- 如何用CreateProcess函数打开一个带=号的网页?
- GDI有些系统泄露,有些不会!有遇到这种情况的进,求指教~!
- 使用C++通过IDispatch::GetIDsOfNames和IDispathc::Invoke调用双接口的自动化组件时出现莫名问题,用JavaScript调用一切正常
- 如何实现“开始“栏那样的界面?
- 请问个关于对话款的问题
- vc dll中对sql数据库的操作
- 请问,我在一个对话框上使用了15个EDIT框,IDC_EDIT1至IDC_EDIT15,同时增加了对应的成员变量m_e1至m_e15,在程序里我要读取这15个对话框,我如何才能在一个for(i=1;i<16;i++)循环里读取所有的输入框的内容?
- OPenGL一个奇怪问题
- ora-00903错误 表名无效??
2等待该进程结束,或者是某个进程发出了Terminate事件(hTerminate )
3退出
用Event来互斥,体现同步为何不用线程咧?
2等待该进程结束,或者是某个进程发出了Terminate事件(hTerminate )
3退出