//InitStart();
SHELLEXECUTEINFO ShExecInfo;
ZeroMemory(&ShExecInfo, sizeof(SHELLEXECUTEINFO));//使用前最好清空
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = this->m_hWnd;
ShExecInfo.lpVerb = _T("open");
//輸入要呼叫的exe檔案路徑
ShExecInfo.lpFile = _T("C://lix2win//dist//test_sequance_wwz//test_sequance_wwz.exe");
//傳入命令列引數資料
ShExecInfo.lpParameters = _T("NULL"); //若沒有命令列引數,可為NULL
//------------------exe檔案在當前路徑下(可忽略)--------------
//獲取當前程式路徑
//TCHAR exeFullPath[200];
//GetModuleFileName(NULL, exeFullPath, 100);
////獲取程式運行當前路徑
//TCHAR drive[100], dir[100], fname[100], ext[20] ;
//_wsplitpath(exeFullPath, drive, dir, fname, ext);
//CString dirPath;
//dirPath.Format(_T("%s%s"), drive, dir);
//------------------------------------------------------------
ShExecInfo.lpDirectory = NULL;//這里exe的目錄可忽略,寫為NULL
ShExecInfo.nShow = SW_HIDE;//這里設定為不顯示exe界面,若設定為SW_SHOW,則可以顯示exe界面
ShExecInfo.hInstApp = NULL;
//呼叫exe程式
ShellExecuteEx(&ShExecInfo);
//關閉該exe程式
if (ShExecInfo.hProcess != NULL)
{
//等待程式運行完畢
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
//關閉程式
TerminateProcess(ShExecInfo.hProcess, 0);
ShExecInfo.hProcess = NULL;
}
這是按鈕系結的代碼,使用shellexecute方法打開一個封裝好的exe,運行時整個界面動不了了得等待運行結束。請問這種情況怎么解決啊
uj5u.com熱心網友回復:
你·不是等待程式運行完畢嗎?WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
uj5u.com熱心網友回復:
//等待程式運行完畢WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
無限等待啊。
開個執行緒去執行那個程式吧,
uj5u.com熱心網友回復:
ui執行緒中wait就只能是停止回應,另開執行緒去處理,然后把結果通知ui執行緒uj5u.com熱心網友回復:
是另開執行緒去呼叫exe嗎
uj5u.com熱心網友回復:
我把等待運行的那段話注釋掉界面就不卡了額,exe還是可以正常在后臺運行,這樣的話是不是也算解決了
uj5u.com熱心網友回復:
如果你只是單純的啟動一個exe而不需要做任何后續的動作(與exe通信、等待程式運行結束的結果、等等),那就不需要等待了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/13558.html
標籤:進程/線程/DLL
上一篇:vs配置QT VS tools,出現The following error occured,error reading vs project settings
