您好,登錄后才能下訂單哦!
這篇文章主要介紹了C#中Process如何調(diào)用外部程序,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
使用C#調(diào)用外部程序,一種是通過Process類,一種是通過命令行,本文主要說一下使用C#中的Process類調(diào)用外部程序的方式。
過程:
1. 創(chuàng)建Process對象
2. 配置啟動選項(輸入、輸出等)
3. 切換工作目錄
4. 設(shè)置外部程序名
5. 設(shè)置傳入?yún)?shù)
6. 啟動外部程序
7. 等待外部程序結(jié)束
8. 關(guān)閉外部程序
Process process = new Process(); //通過new創(chuàng)建一個Process對象 process //使用Process類需要在程序最開始處引用Process類所在命名空間,即下面這句 using System.Diagnostics;
process.StartInfo.UseShellExecute = false; //必要參數(shù) process.StartInfo.RedirectStandardOutput = true;//輸出參數(shù)設(shè)定 process.StartInfo.RedirectStandardInput = true;//傳入?yún)?shù)設(shè)定 process.StartInfo.CreateNoWindow = true;
1、工作目錄:程序運行時其啟動文件以及配置文件等文件的所在目錄。比如在桌面上選中QQ,右鍵單擊“打開文件所在位置”,這個目錄就是QQ運行起來后的工作目錄。
我們當前編寫的C#程序運行后也有自己的工作目錄,因此如果要在C#中調(diào)用外部程序,最好在調(diào)用前將當前工作目錄切換為外部程序的工作目錄。
2、查看當前工作目錄
以下兩種代碼都可以打印出當前程序的工作目錄
System.IO.Directory.GetCurrentDirectory();
該函數(shù)以sting類型返回當前工作目錄,可以使用控制臺打印當前工作目錄。
Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目錄
AppDomain.CurrentDomain.BaseDirectory;
AppDomain:應(yīng)用程序域,以上語句可以獲取當前應(yīng)用程序域的基目錄,也就是 應(yīng)用程序名.exe所在目錄,一般這個目錄也是默認的工作目錄。
AppDomain.CurrentDomain.BaseDirectory;
是sting類型,因此也可以使用控制臺打印出來。
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
這兩種方法打印工作目錄的區(qū)別在于:
第一種方法打印的是工作目錄,是動態(tài)的(工作目錄可更改)
第二種方法打印的是當前AppDomain的基目錄,只要AppDomain沒被更改,打印出來的始終是 當前AppDomain的基目錄,也就是應(yīng)用程序名.exe所在目錄
因此,可以在啟動外部程序前更改工作目錄為外部程序的工作目錄,在外部程序執(zhí)行結(jié)束后再使用AppDomain.CurrentDomain.BaseDirectory;
將工作目錄恢復為原始基目錄以保證后續(xù)程序的正常執(zhí)行。
3、切換當前工作目錄為外部程序工作目錄
System.IO.Directory.SetCurrentDirectory (外部程序工作目錄); //外部程序工作目錄以字符串形式給出,且必須是絕對路徑
比如當前C#所在程序的路徑為 C:/Deskop/C#/bin/Debug/
AppDomain.CurrentDomain.BaseDirectory就等于C:/Deskop/C#/bin/Debug/ (當前工作目錄也是這個路徑)
所調(diào)用的外部程序目錄在 C:/Deskop/C#/bin/Debug/NASM/
nasm.exe在C:/Deskop/C#/bin/Debug/NASM/nasm.exe
這里就可以寫成
System.IO.Directory.SetCurrentDirectory ("C:\\Deskop\\C#\\bin\\Debug\\NASM\\"); //直接給出絕對路徑 //路徑分隔用 \ 轉(zhuǎn)義 (即\\) System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM"); //或者使用基目錄給出絕對路徑 System.IO.Directory.SetCurrentDirectory(System.IO.Directory.GetCurrentDirectory() + "\\NASM"); //或者根據(jù)當前工作目錄設(shè)置
4、恢復原始工作目錄
在外部程序執(zhí)行結(jié)束后需要將工作目錄切換回來,借助AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
切換工作目錄后,一般外部程序名就在新的目錄目錄下。
process.StartInfo.FileName = "nasm.exe"; //等價于"C:\\Deskop\\C#\\bin\\Debug\\NASM\\nasm.exe"
設(shè)置傳入?yún)?shù)
光有程序不行,還需要指定讓這個程序執(zhí)行什么操作,這個操作就通過傳入?yún)?shù)傳遞。
比如在nasm下要將其工作目錄下的MySourcesCode目錄下的demo02.asm編譯鏈接生成4.obj文件(生成在MySourcesCode目錄下),就需要打開nasm,輸入如下命令
nasm MySourcesCode/demo02.asm -o MySourcesCode/4.obj
nasm是程序名,后面的就是nasm的傳入?yún)?shù),也就是我們需要設(shè)置的東西。
process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj ";
process.Start(); process.WaitForExit();//等待程序執(zhí)行完退出進程 process.Close();
完整代碼
Process process = new Process(); process.StartInfo.UseShellExecute = false; //必要參數(shù) process.StartInfo.RedirectStandardOutput = true;//輸出參數(shù)設(shè)定 process.StartInfo.RedirectStandardInput = true;//傳入?yún)?shù)設(shè)定 process.StartInfo.CreateNoWindow = true; System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM"); //設(shè)置NASM工作目錄為當前工作目錄 //Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目錄 process.StartInfo.FileName = "nasm.exe"; //設(shè)置要打開的程序名 process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj "; //設(shè)置傳入?yún)?shù) process.Start(); //程序啟動 process.WaitForExit();//等待程序執(zhí)行完退出進程 process.Close(); //關(guān)閉程序 System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); //NASM執(zhí)行完后需要將工作目錄切換為原工作目錄 //Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目錄
外部程序
外部程序所在目錄
外部程序源文件_目標文件所在目錄
C#調(diào)用外部程序后生成的目標文件
感謝你能夠認真閱讀完這篇文章,希望小編分享的“C#中Process如何調(diào)用外部程序”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。