使用 ShellExecute 啟動控制台應用程式(如 br.exe)時,視窗執行完畢立即關閉,導致無法查看輸出。主要原因在於參數傳遞方式導致程式異常退出,或程式本身執行完畢即退出無暫停機制。
將執行檔路徑與所有參數合併為單一字串傳給 lpFile 參數,lpParameters 設為 NULL 或空字串。範例:
CString cmd = _T("E:\\IDIdentify\\openbr-new\\build-msvc2013-x86\\install\\bin\\br.exe ")
_T("\"-algorithm FaceRecognition -compare ")
_T("E:\\IDIdentify\\openbr-new\\build-msvc2013-x86\\install\\bin\\3.jpg ")
_T("E:\\IDIdentify\\openbr-new\\build-msvc2013-x86\\install\\bin\\4.jpg\"");
ShellExecute(0, _T("open"), cmd, _T(""), _T(""), SW_SHOWNORMAL);
cmd /k 前綴,執行完保留視窗:cmd /k br.exe -algorithm ...br.exe 原始碼,在 main 結束前加 system("pause") 或 getchar()。CreateProcess 配合 CREATE_NEW_CONSOLE 旗標,並等待進程結束。ShellExecute 的 lpParameters 參數對複雜引號處理支援有限,合併為單一命令列最穩健。