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

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

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

簡(jiǎn)介

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

一般有兩種方法

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

因此這里我推薦使用第二個(gè)方法,使用異步的方式來(lái)創(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.填寫(xiě)相關(guān)的參數(shù)

這里所需的參數(shù)主要是將輸入和輸出重新定向到Process類的內(nèi)存中,這樣我們就可以通過(guò)Process類實(shí)例來(lái)操作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來(lái)試試看,這里的

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

5.獲取輸出

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

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

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

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

補(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)容,一下來(lá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ì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • C#驗(yàn)證碼問(wèn)題的快速解決方法

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

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

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

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

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

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

    c# 用ICSharpCode組件壓縮文件

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

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

    這篇文章主要為大家詳細(xì)介紹了C# windows語(yǔ)音識(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 指令可能由生成過(guò)程中的自動(dòng)中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號(hào)生成輸出,則可以移除行,然后用 #line 模擬原始行號(hào)
    2014-01-01

最新評(píng)論

明星| 玉林市| 钦州市| 永川市| 怀集县| 丹江口市| 宝应县| 耒阳市| 乳源| 广昌县| 武义县| 云和县| 来宾市| 昌宁县| 云南省| 峨眉山市| 大荔县| 修文县| 胶南市| 德庆县| 高清| 新野县| 铁岭市| 时尚| 广西| 凤阳县| 海丰县| 乡宁县| 衡南县| 青神县| 丰台区| 天台县| 临朐县| 托克逊县| 堆龙德庆县| 铜山县| 岐山县| 潜山县| 洛川县| 岳西县| 常德市|