最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#執(zhí)行EXE文件與輸出消息的提取操作

 更新時(shí)間:2021年04月16日 11:00:58   作者:arenascat  
這篇文章主要介紹了C#執(zhí)行EXE文件與輸出消息的提取操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

簡(jiǎn)介

有時(shí)候會(huì)需要在c#特別是WPF環(huán)境下調(diào)用其他的程序,這類型的程序以命令行為執(zhí)行環(huán)境,這里就說明下如何調(diào)用exe并傳遞參數(shù)

一般有兩種方法

一種是直接調(diào)用exe程序并執(zhí)行,另一種是調(diào)用cmd.exe然后通過輸入的方式來執(zhí)行指定的程序,前者雖然直接但是有時(shí)候不能讀出輸出的信息

因此這里我推薦使用第二個(gè)方法,使用異步的方式來創(chuàng)建cmd.exe進(jìn)程,然后調(diào)用我們所需要的程序

1.聲明和初始化一個(gè)Process類實(shí)例

//進(jìn)程的名稱
string fileName = "cmd.exe";
//測(cè)試參數(shù)
string para = @"avrdude\avrdude.exe -C avrdude\avrdude.conf -v -p atmega32u4 -c avr109 -P " + portname+" -b 57600 -D -U flash:w:node.hex:i"; 
//聲明
Process p = new Process();

2.填寫相關(guān)的參數(shù)

這里所需的參數(shù)主要是將輸入和輸出重新定向到Process類的內(nèi)存中,這樣我們就可以通過Process類實(shí)例來操作cmd的輸入,同時(shí)也可以讀出命令行的輸出

p.StartInfo.CreateNoWindow = true;         // 不創(chuàng)建新窗口    
p.StartInfo.UseShellExecute = false;       //不啟用shell啟動(dòng)進(jìn)程  
p.StartInfo.RedirectStandardInput = true;  // 重定向輸入    
p.StartInfo.RedirectStandardOutput = true; // 重定向標(biāo)準(zhǔn)輸出    
p.StartInfo.RedirectStandardError = true;  // 重定向錯(cuò)誤輸出  
p.StartInfo.FileName = fileName;

3.執(zhí)行

p.Start();

4.模擬輸入并結(jié)束輸入

模擬輸入的部分已經(jīng)包括了我們需要調(diào)用的程序以及參數(shù),可以事先用cmd來試試看,這里的

p.StandardInput.WriteLine(para + "&exit");
p.StandardInput.AutoFlush = true;
p.StandardInput.Close();

5.獲取輸出

這一部分可以獲取在cmd中執(zhí)行的程序在執(zhí)行完成后所輸出的信息,WaitForExit可以填寫參數(shù)也可以不寫

p.StandardOutput.ReadToEnd();
string output = p.StandardError.ReadToEnd();
//  p.OutputDataReceived += new DataReceivedEventHandler(processOutputDataReceived);
p.WaitForExit();//參數(shù)單位毫秒,在指定時(shí)間內(nèi)沒有執(zhí)行完則強(qiáng)制結(jié)束,不填寫則無限等待
p.Close();
AddInfo(output);

這里我注釋掉的部分代碼是設(shè)置收到輸出之后就跳轉(zhuǎn)的函數(shù),但經(jīng)過測(cè)試發(fā)現(xiàn)和我前文所述的第一種方式一樣不可行,很多的程序是用錯(cuò)誤輸出來輸出信息。因此棄用

這樣就可以完成消息的處理了,具體的結(jié)合WPF的用法(如下圖)我將在后繼進(jìn)行說明

補(bǔ)充:C# 調(diào)用外部程序,并獲取輸出和錯(cuò)誤信息

1. 同步模式

public void exec(string exePath, string parameters)
        {
            System.Diagnostics.ProcessStartInfo psi =
   new System.Diagnostics.ProcessStartInfo();
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;
            psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            psi.UseShellExecute = false;
            psi.FileName = exePath;
            psi.Arguments = parameters;
            System.Diagnostics.Process process = System.Diagnostics.Process.Start(psi);
            System.IO.StreamReader outputStreamReader = process.StandardOutput;
            System.IO.StreamReader errStreamReader = process.StandardError;
            process.WaitForExit(2000);
            if (process.HasExited)
            {
                string output = outputStreamReader.ReadToEnd();
                string error = errStreamReader.ReadToEnd();
                MessageBox.Show(output);
                MessageBox.Show(error);
            }
 
        }

2.異步模式

public void exec(string exePath, string parameters)
        {
            Process process = new System.Diagnostics.Process();
            process.StartInfo.FileName = exePath;
            process.StartInfo.Arguments = parameters;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.Start();
            process.BeginOutputReadLine();
            process.OutputDataReceived += new DataReceivedEventHandler(processOutputDataReceived);
        }
 
        private void processOutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            MessageBox.Show(e.Data); 
        }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Asp.Net中MVC緩存詳解

    Asp.Net中MVC緩存詳解

    這篇文章主要介紹了Asp.Net中MVC緩存的種類區(qū)別等內(nèi)容,一下來學(xué)習(xí)下。
    2017-12-12
  • 輕松學(xué)習(xí)C#的密封類

    輕松學(xué)習(xí)C#的密封類

    輕松學(xué)習(xí)C#的密封類,對(duì)C#的密封類感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的密封類
    2015-11-11
  • C# out關(guān)鍵詞的應(yīng)用實(shí)例

    C# out關(guān)鍵詞的應(yīng)用實(shí)例

    下面小編就為大家分享一篇C# out關(guān)鍵詞的應(yīng)用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#驗(yàn)證碼問題的快速解決方法

    C#驗(yàn)證碼問題的快速解決方法

    下面小編就為大家?guī)硪黄狢#驗(yàn)證碼問題的快速解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • unity實(shí)現(xiàn)方向盤轉(zhuǎn)動(dòng)效果

    unity實(shí)現(xiàn)方向盤轉(zhuǎn)動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)方向盤轉(zhuǎn)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#請(qǐng)求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    C#請(qǐng)求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了C#請(qǐng)求http向網(wǎng)頁發(fā)送數(shù)據(jù)、網(wǎng)頁接收的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • c# 用ICSharpCode組件壓縮文件

    c# 用ICSharpCode組件壓縮文件

    今天,主要總結(jié)下,windows平臺(tái)下,zip的壓縮與解壓的方法,用ICSharpCode組件,有此需求的朋友可以參考下本文
    2021-06-06
  • C# windows語音識(shí)別與朗讀實(shí)例

    C# windows語音識(shí)別與朗讀實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C# windows語音識(shí)別與朗讀實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#實(shí)現(xiàn)清除IE瀏覽器緩存的方法

    C#實(shí)現(xiàn)清除IE瀏覽器緩存的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)清除IE瀏覽器緩存的方法,實(shí)例分析了C#針對(duì)瀏覽器緩存清理所涉及的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析

    C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析

    #line 指令可能由生成過程中的自動(dòng)中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號(hào)生成輸出,則可以移除行,然后用 #line 模擬原始行號(hào)
    2014-01-01

最新評(píng)論

朝阳县| 武宁县| 和林格尔县| 孟津县| 靖边县| 绥滨县| 焉耆| 房山区| 北安市| 大姚县| 灵寿县| 柏乡县| 亳州市| 胶南市| 青田县| 无极县| 四会市| 岳西县| 上虞市| 沁水县| 曲靖市| 岳池县| 长沙市| 盖州市| 廉江市| 句容市| 玉龙| 台山市| 文水县| 广安市| 壶关县| 云阳县| 长宁县| 南开区| 石首市| 武安市| 巴东县| 关岭| 昌乐县| 张家界市| 安陆市|