91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Process如何調用外部程序

發布時間:2021-02-02 09:52:29 來源:億速云 閱讀:436 作者:小新 欄目:開發技術

這篇文章主要介紹了C#中Process如何調用外部程序,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

使用C#調用外部程序,一種是通過Process類,一種是通過命令行,本文主要說一下使用C#中的Process類調用外部程序的方式。

過程:

1. 創建Process對象
2. 配置啟動選項(輸入、輸出等)
3. 切換工作目錄
4. 設置外部程序名
5. 設置傳入參數
6. 啟動外部程序
7. 等待外部程序結束
8. 關閉外部程序

過程

創建Process對象

Process process = new Process();
//通過new創建一個Process對象 process
//使用Process類需要在程序最開始處引用Process類所在命名空間,即下面這句
using System.Diagnostics;

配置啟動選項

process.StartInfo.UseShellExecute = false; //必要參數
process.StartInfo.RedirectStandardOutput = true;//輸出參數設定
process.StartInfo.RedirectStandardInput = true;//傳入參數設定
process.StartInfo.CreateNoWindow = true;

切換工作目錄

1、工作目錄:程序運行時其啟動文件以及配置文件等文件的所在目錄。比如在桌面上選中QQ,右鍵單擊“打開文件所在位置”,這個目錄就是QQ運行起來后的工作目錄。

我們當前編寫的C#程序運行后也有自己的工作目錄,因此如果要在C#中調用外部程序,最好在調用前將當前工作目錄切換為外部程序的工作目錄。

2、查看當前工作目錄

以下兩種代碼都可以打印出當前程序的工作目錄

System.IO.Directory.GetCurrentDirectory();

該函數以sting類型返回當前工作目錄,可以使用控制臺打印當前工作目錄。

Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); 
//打印一下工作目錄

AppDomain.CurrentDomain.BaseDirectory;

AppDomain:應用程序域,以上語句可以獲取當前應用程序域的基目錄,也就是 應用程序名.exe所在目錄,一般這個目錄也是默認的工作目錄。

AppDomain.CurrentDomain.BaseDirectory;是sting類型,因此也可以使用控制臺打印出來。

Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);

這兩種方法打印工作目錄的區別在于:

第一種方法打印的是工作目錄,是動態的(工作目錄可更改)

第二種方法打印的是當前AppDomain的基目錄,只要AppDomain沒被更改,打印出來的始終是 當前AppDomain的基目錄,也就是應用程序名.exe所在目錄

因此,可以在啟動外部程序前更改工作目錄為外部程序的工作目錄,在外部程序執行結束后再使用AppDomain.CurrentDomain.BaseDirectory;將工作目錄恢復為原始基目錄以保證后續程序的正常執行。

3、切換當前工作目錄為外部程序工作目錄

System.IO.Directory.SetCurrentDirectory (外部程序工作目錄);
//外部程序工作目錄以字符串形式給出,且必須是絕對路徑

比如當前C#所在程序的路徑為 C:/Deskop/C#/bin/Debug/

AppDomain.CurrentDomain.BaseDirectory就等于C:/Deskop/C#/bin/Debug/
(當前工作目錄也是這個路徑)

所調用的外部程序目錄在 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\\");
//直接給出絕對路徑
//路徑分隔用 \ 轉義 (即\\)
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM");
//或者使用基目錄給出絕對路徑
System.IO.Directory.SetCurrentDirectory(System.IO.Directory.GetCurrentDirectory() + "\\NASM");
//或者根據當前工作目錄設置

4、恢復原始工作目錄

在外部程序執行結束后需要將工作目錄切換回來,借助AppDomain.CurrentDomain.BaseDirectory

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

設置外部程序名

切換工作目錄后,一般外部程序名就在新的目錄目錄下。

process.StartInfo.FileName = "nasm.exe";
//等價于"C:\\Deskop\\C#\\bin\\Debug\\NASM\\nasm.exe"

設置傳入參數

光有程序不行,還需要指定讓這個程序執行什么操作,這個操作就通過傳入參數傳遞。

比如在nasm下要將其工作目錄下的MySourcesCode目錄下的demo02.asm編譯鏈接生成4.obj文件(生成在MySourcesCode目錄下),就需要打開nasm,輸入如下命令

nasm MySourcesCode/demo02.asm -o MySourcesCode/4.obj

nasm是程序名,后面的就是nasm的傳入參數,也就是我們需要設置的東西。

process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj ";

程序啟動、等待執行、關閉

process.Start();
process.WaitForExit();//等待程序執行完退出進程  
process.Close();

完整代碼

Process process = new Process();
process.StartInfo.UseShellExecute = false; //必要參數
process.StartInfo.RedirectStandardOutput = true;//輸出參數設定
process.StartInfo.RedirectStandardInput = true;//傳入參數設定
process.StartInfo.CreateNoWindow = true;


System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM");
//設置NASM工作目錄為當前工作目錄

//Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目錄

process.StartInfo.FileName = "nasm.exe";
//設置要打開的程序名

process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj ";
//設置傳入參數

process.Start(); //程序啟動
process.WaitForExit();//等待程序執行完退出進程  
process.Close(); //關閉程序

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
//NASM執行完后需要將工作目錄切換為原工作目錄

//Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //打印一下工作目錄

環境及運行截圖

外部程序

C#中Process如何調用外部程序

外部程序所在目錄

C#中Process如何調用外部程序

外部程序源文件_目標文件所在目錄

C#中Process如何調用外部程序

C#調用外部程序后生成的目標文件

C#中Process如何調用外部程序

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C#中Process如何調用外部程序”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

法库县| 乌兰察布市| 息烽县| 武威市| 调兵山市| 贵港市| 改则县| 通江县| 醴陵市| 莆田市| 南皮县| 民权县| 任丘市| 那坡县| 客服| 沂水县| 五台县| 永州市| 囊谦县| 巍山| 友谊县| 平顶山市| 疏勒县| 景宁| 安龙县| 临夏县| 砚山县| 淳化县| 英吉沙县| 普洱| 托克逊县| 博乐市| 福泉市| 徐闻县| 凤城市| 彰化市| 隆昌县| 新建县| 报价| 菏泽市| 雷山县|