C++程式怎樣呼叫exe可執行檔案
在開發專案的時候,有的時候會分開來開發,分開的有時是exe檔案,有的時候也會呼叫現成的工具包裡面的一些exe檔案,這樣在專案裡面就要通過呼叫exe檔案來使用。
那麼在C++裡面直接呼叫exe檔案的方法有哪些呢?現在可考慮的方法主要有:
a.使用system函式
b.使用exec或者是execv函式
c.使用WinExec函式
d.使用CreateProcess函式
e.使用ShellExcecuteEx函式
1) 上面的5中方法中,system函式,函式原型system(執行shell命令)定義函式是,int system(const char * string),可以呼叫一些DOS命令,比如:
system("cls");//清屏,等於在DOS上使用cls命令
system函式會呼叫fork()函式產生子進行橫,由子程式來呼叫/bin/sh-c string來執行引數string字串所代表的命令,此命令執行完後隨即返回撥用的程式,system函式不能控制程式視窗是否顯示。一般在專案中,這種方法不予考慮。
2)使用execl或execv函式
這是exec函式族裡面的兩個函式,在UNIX環境下用的比較多,exec函式族的作用是根據指定的檔名找到可執行檔案,並用它來取代呼叫程式的內容,也就是說在呼叫程式內部執行一個可執行檔案,這裡的可執行檔案既可以是二進位制檔案,也可以是任何Linux下的可執行的指令碼檔案,與一般情況不同,exec函式族的函式執行成功後不會返回,只有呼叫失敗了才會返回一個-1,從原程式的呼叫點接著往下執行。它也是不能控制程式視窗是否顯示。
3)使用WinExec函式
WinExec函式可以方便地在應用程式中執行一個程式,執行一個標準程式一般使用:
WinExec('C:\WINDOWS\NOTEPAD.EXE', SW_SHOWNORMAL);
第二個引數是控制程式主視窗的顯示方式,用WinExec只能執行exe檔案,但是WinExec函式不好控制主程式來等該exe程式的結束。WinExec是Windows的老函式了,現在的CreateProcess幾乎可以替代WinExe的所有功能。
4)使用CreateProcess函式
CreateProcess函式是新建一個程式,下面是一個使用CreateProcess函式的例子:
void createchildprocessandwaituntildone(const ansistring& strcmdline)
{
process_information piprocinfo;
startupinfo sistartinfo;
// set up members of startupinfo structure.
sistartinfo.cb = sizeof(startupinfo);
sistartinfo.lpreserved = null;
sistartinfo.lpreserved2 = null;
sistartinfo.cbreserved2 = 0;
sistartinfo.lpdesktop = null;
sistartinfo.dwflags = 0;
// create the child process.
createprocess(
null,
strcmdline.c_str(),
null, // process security attributes
null, // primary thread security attributes
0, // handles are inherited
0, // creation flags
null, // use parent\'s environment
null, // use parent\'s current directory
&sistartinfo, // startupinfo pointer
&piprocinfo); // receives process_information
// wait for the processs to finish
dword rc = waitforsingleobject(
piprocinfo.hprocess, // process handle
infinite);
}
使用CreateProcess函式,你必須人為地控制該程式的生死,這一方面是使用程式控制來實現。程式控制的意義在於可以建立一個程式,並且可以通過程式控制程式碼結束程式。
5)使用ShellExcecuteEx函式
這個函式主要是在檔案上執行一個函式,如果執行成功則返回一個非0值,否則返回一個0值。函式的原型是:
WINSHELLAPI BOOL WINAPI ShellExecuteEx(
LPSHELLEXECUTEINFO lpExecInfo);
引數lpExecInfo:是資料結構 LPSHELLEXECUTEINFO 的地址,包含了和接收一些被執行的應用程式的一些資訊。下面是一個使用的示例:
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("open");
ShExecInfo.lpFile = _T("a.exe");
ShExecInfo.lpParameters = _T("-a a");
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitCursorBegin();
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
WaitCursorEnd();
這個函式可以通過ShExecInfo.lpParameters來傳遞exe檔案的引數,通過屬性ShExecInfo.nShow來控制程式視窗是否顯示。
後面三個函式都是SDK函式,現在在執行專案中的exe檔案的時候,使用比較多的就是後面得兩個函式,我在自己的專案中使用的就是ShellExecuteEx函式,比CreateProcess函式使用方便一些。
相關文章
- Java執行exe,bat等可執行檔案JavaBAT
- 把可執行jar打包成exe檔案JAR
- matlab (.m)檔案生成 windows 可執行(.exe)檔案MatlabWindows
- Python 打包 windows 可執行的 exe 檔案PythonWindows
- 將Python程式(.py)轉換為Windows可執行檔案(.exe)PythonWindows
- electron+puppeteer 封裝成exe可執行檔案封裝
- Python如何生成windows可執行的exe檔案PythonWindows
- 將自己的python程式碼打包成exe的可執行檔案Python
- java呼叫exe檔案Java
- 怎樣將class檔案變成.exe檔案?薦
- 用py2exe將python檔案轉換成exe可執行程式Python行程
- 怎麼生成可執行的.jar檔案???????????JAR
- wine-在mac上執行exe執行檔案Mac
- js呼叫執行exe應用程式程式碼例項JS
- 請問網頁可以打包成exe可執行檔案嗎?謝謝網頁
- 在網頁如何呼叫客戶端的可執行檔案網頁客戶端
- 從cmake解決clion編譯生成的可執行檔案(.exe)不可執行的問題編譯
- matlab程式碼轉exe可執行軟體Matlab
- python2 反編譯pyinstaller打包的可執行exe檔案Python編譯
- 一個可執行檔案是怎麼來的
- win10執行exe檔案無反應怎麼辦 win10執行exe無反應解決方法Win10
- win10不能執行exe檔案怎麼解決_win10打不開exe檔案解決步驟Win10
- python呼叫matlab程式,MATLAB 指令碼打包為 exe可執行程式PythonMatlab指令碼行程
- 執行時生成其它EXE檔案(VB6)
- 從C檔案到可執行elf檔案
- 將Python程式打包成可執行檔案薦Python
- Mach-O 可執行檔案Mac
- maven 打包可執行 jar 檔案MavenJAR
- MATLAB生成可執行檔案Matlab
- ubuntu 把檔案設定為可執行檔案Ubuntu
- 如何讓bat,cmd檔案後臺執行?如何把檔案打包成EXE?BAT
- 建立可執行檔案build.shUI
- Linux可執行的檔案(轉)Linux
- matlab生成exe獨立執行檔案已破解(好用)Matlab
- python製作exe可執行表白神器Python
- Java呼叫本地可執行程式Java行程
- Python程式碼打包成可執行檔案的常用方法!Python
- C語言判斷檔案是否存在,判斷檔案可讀可寫可執行C語言