QT Gui界面調用cmd程序

1、用QProcess調用沒有窗口顯示

但是任務管理欄裏有進程在

 

 

2、通過system調用

	QString qstrRExePath("C:/run/test.exe");
	QString qstrWorkPath("C:/run");
	QString str = "cd " + qstrWorkPath + " & " + qstrRExePath;
	system(str.toStdString().c_str());

能彈出窗口,但是控制檯進程依賴與gui進程存在而存在,做不到啓動控制檯進程後,主程序把自己強殺掉

 

3、通過WIN32API函數CreateProcess用來創建一個新的進程

注意參數

(1)si.wShowWindow = SW_SHOWNORMAL;

(2)CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP

(3)// 無限期等待線程執行完畢  
            // 主線程被掛起  
            //WaitForSingleObject(pi.hProcess, INFINITE);

static DWORD CreateIndependentProcessShowWindows(char const *strProcess)
		{
			//LOG_SETUP_DEBUG("[cmd]: %s", strCmd);
			std::string strCmdCopy(strProcess);
			std::wstring wstrCmdCopy = CCodeConvert::ACP_to_WUNICODE(strCmdCopy.c_str());
			STARTUPINFO si = { 0 };
			PROCESS_INFORMATION pi = { 0 };
			si.cb = sizeof(STARTUPINFO);
			si.dwFlags = STARTF_USESHOWWINDOW;
			si.wShowWindow = SW_SHOWNORMAL;
			int iRet = 0;
			BOOL bRet = CreateProcess(
				NULL,
				(LPWSTR)wstrCmdCopy.c_str(),
				NULL,
				NULL,
				FALSE,
				CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,
				NULL,
				NULL,
				&si,
				&pi
			);
			if (bRet == FALSE)
			{
				DWORD iErr = GetLastError();
				return 0xFF + iErr;
			}
			CloseHandle(pi.hThread);
			// 無限期等待線程執行完畢  
			// 主線程被掛起  
			//WaitForSingleObject(pi.hProcess, INFINITE);
			DWORD dwExitCode;
			GetExitCodeProcess(pi.hProcess, &dwExitCode);
			CloseHandle(pi.hProcess);

			return dwExitCode;
		};
	};

話題:

http://www.qtcn.org/bbs/read-htm-tid-57514.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章