欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# Process調(diào)用外部程序的實(shí)現(xiàn)

 更新時(shí)間:2021年02月01日 11:38:33   作者:_程序兔  
這篇文章主要介紹了C# Process調(diào)用外部程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

使用C#調(diào)用外部程序,一種是通過(guò)Process類,一種是通過(guò)命令行,本文主要說(shuō)一下使用C#中的Process類調(diào)用外部程序的方式。

過(guò)程:

1. 創(chuàng)建Process對(duì)象
2. 配置啟動(dòng)選項(xiàng)(輸入、輸出等)
3. 切換工作目錄
4. 設(shè)置外部程序名
5. 設(shè)置傳入?yún)?shù)
6. 啟動(dòng)外部程序
7. 等待外部程序結(jié)束
8. 關(guān)閉外部程序

過(guò)程

創(chuàng)建Process對(duì)象

Process process = new Process();
//通過(guò)new創(chuàng)建一個(gè)Process對(duì)象 process
//使用Process類需要在程序最開(kāi)始處引用Process類所在命名空間,即下面這句
using System.Diagnostics;

配置啟動(dòng)選項(xiàng)

process.StartInfo.UseShellExecute = false; //必要參數(shù)
process.StartInfo.RedirectStandardOutput = true;//輸出參數(shù)設(shè)定
process.StartInfo.RedirectStandardInput = true;//傳入?yún)?shù)設(shè)定
process.StartInfo.CreateNoWindow = true;

切換工作目錄

1、工作目錄:程序運(yùn)行時(shí)其啟動(dòng)文件以及配置文件等文件的所在目錄。比如在桌面上選中QQ,右鍵單擊“打開(kāi)文件所在位置”,這個(gè)目錄就是QQ運(yùn)行起來(lái)后的工作目錄。

我們當(dāng)前編寫的C#程序運(yùn)行后也有自己的工作目錄,因此如果要在C#中調(diào)用外部程序,最好在調(diào)用前將當(dāng)前工作目錄切換為外部程序的工作目錄。

2、查看當(dāng)前工作目錄

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

System.IO.Directory.GetCurrentDirectory();

該函數(shù)以sting類型返回當(dāng)前工作目錄,可以使用控制臺(tái)打印當(dāng)前工作目錄。

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

AppDomain.CurrentDomain.BaseDirectory;

AppDomain:應(yīng)用程序域,以上語(yǔ)句可以獲取當(dāng)前應(yīng)用程序域的基目錄,也就是 應(yīng)用程序名.exe所在目錄,一般這個(gè)目錄也是默認(rèn)的工作目錄。

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

Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory); 

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

第一種方法打印的是工作目錄,是動(dòng)態(tài)的(工作目錄可更改)

第二種方法打印的是當(dāng)前AppDomain的基目錄,只要AppDomain沒(méi)被更改,打印出來(lái)的始終是 當(dāng)前AppDomain的基目錄,也就是應(yīng)用程序名.exe所在目錄

因此,可以在啟動(dòng)外部程序前更改工作目錄為外部程序的工作目錄,在外部程序執(zhí)行結(jié)束后再使用AppDomain.CurrentDomain.BaseDirectory;將工作目錄恢復(fù)為原始基目錄以保證后續(xù)程序的正常執(zhí)行。

3、切換當(dāng)前工作目錄為外部程序工作目錄

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

比如當(dāng)前C#所在程序的路徑為 C:/Deskop/C#/bin/Debug/

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

所調(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\\");
//直接給出絕對(duì)路徑
//路徑分隔用 \ 轉(zhuǎn)義 (即\\)
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory + "\\NASM");
//或者使用基目錄給出絕對(duì)路徑
System.IO.Directory.SetCurrentDirectory(System.IO.Directory.GetCurrentDirectory() + "\\NASM");
//或者根據(jù)當(dāng)前工作目錄設(shè)置

4、恢復(fù)原始工作目錄

在外部程序執(zhí)行結(jié)束后需要將工作目錄切換回來(lái),借助AppDomain.CurrentDomain.BaseDirectory

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

設(shè)置外部程序名

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

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

設(shè)置傳入?yún)?shù)

光有程序不行,還需要指定讓這個(gè)程序執(zhí)行什么操作,這個(gè)操作就通過(guò)傳入?yún)?shù)傳遞。

比如在nasm下要將其工作目錄下的MySourcesCode目錄下的demo02.asm編譯鏈接生成4.obj文件(生成在MySourcesCode目錄下),就需要打開(kāi)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 ";

程序啟動(dòng)、等待執(zhí)行、關(guān)閉

process.Start();
process.WaitForExit();//等待程序執(zhí)行完退出進(jìn)程  
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工作目錄為當(dāng)前工作目錄

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

process.StartInfo.FileName = "nasm.exe";
//設(shè)置要打開(kāi)的程序名

process.StartInfo.Arguments = "MySourcesCode\\demo02.asm -o MySourcesCode\\4.obj ";
//設(shè)置傳入?yún)?shù)

process.Start(); //程序啟動(dòng)
process.WaitForExit();//等待程序執(zhí)行完退出進(jìn)程  
process.Close(); //關(guān)閉程序

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

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

環(huán)境及運(yùn)行截圖

外部程序

外部程序所在目錄

外部程序源文件_目標(biāo)文件所在目錄

C#調(diào)用外部程序后生成的目標(biāo)文件

到此這篇關(guān)于C# Process調(diào)用外部程序的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# Process調(diào)用外部程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • unity實(shí)現(xiàn)手游虛擬搖桿

    unity實(shí)現(xiàn)手游虛擬搖桿

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)手游虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#實(shí)現(xiàn)推送釘釘消息的方法示例

    C#實(shí)現(xiàn)推送釘釘消息的方法示例

    這篇文章主要介紹了C#實(shí)現(xiàn)推送釘釘消息的方法,結(jié)合實(shí)例形式分析了C#使用釘釘API實(shí)現(xiàn)消息推送的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • Visual C#中如何使用IComparable和IComparer接口

    Visual C#中如何使用IComparable和IComparer接口

    這篇文章主要介紹了C#中使用IComparable和IComparer接口,在本例中,該對(duì)象被用作第二個(gè)參數(shù)被傳遞給Array.Sort的接受IComparer實(shí)例的重載方法,需要的朋友可以參考下
    2023-04-04
  • 詳解C#中一維數(shù)組的插入

    詳解C#中一維數(shù)組的插入

    本文內(nèi)容給大家分享了在C#中進(jìn)行一維數(shù)組的插入的詳細(xì)實(shí)例代碼,大家可以測(cè)試下。
    2018-03-03
  • 在WPF中實(shí)現(xiàn)平滑滾動(dòng)的方法詳解

    在WPF中實(shí)現(xiàn)平滑滾動(dòng)的方法詳解

    這篇文章介紹了WPF實(shí)現(xiàn)平滑滾動(dòng)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c# 制作gif的四種方法

    c# 制作gif的四種方法

    這篇文章主要介紹了c# 制作gif的四種方法,幫助大家更好的理解和學(xué)習(xí)c#編程語(yǔ)言,感興趣的朋友可以了解下
    2020-12-12
  • C#實(shí)現(xiàn)將漢字轉(zhuǎn)化為2位大寫的16進(jìn)制Unicode的方法

    C#實(shí)現(xiàn)將漢字轉(zhuǎn)化為2位大寫的16進(jìn)制Unicode的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將漢字轉(zhuǎn)化為2位大寫的16進(jìn)制Unicode的方法,分析了轉(zhuǎn)換的技巧并以實(shí)例形式給出了具體的轉(zhuǎn)換方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 經(jīng)典實(shí)例講解C#遞歸算法

    經(jīng)典實(shí)例講解C#遞歸算法

    這篇文章主要用實(shí)例講解C#遞歸算法的概念以及用法,文中代碼非常詳細(xì),幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#集合之不變集合的用法

    C#集合之不變集合的用法

    這篇文章介紹了C#集合之不變集合的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 基于C#實(shí)現(xiàn)XML文件讀取工具類

    基于C#實(shí)現(xiàn)XML文件讀取工具類

    這篇文章主要介紹了基于C#實(shí)現(xiàn)XML文件讀取工具類,涉及C#針對(duì)XML文件各節(jié)點(diǎn)獲取的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論