在專案開發中,有時候要處理一些檔案,比如視訊格式的轉換,如果用C開發一套演算法,再用C#呼叫,未免得不償失!有時候呼叫現有的程式反而更加方便。今天就來說一下C#中如何呼叫外部程式,執行一些特殊任務。
這裡演示呼叫cmd.exe,即我們常用的DOS。
下面來看程式碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace WinShell { class Program { static void Main(string[] args) { Console.WriteLine(Execute("ver",10)); Console.Read(); } /// <summary> /// 執行DOS命令,返回DOS命令的輸出 /// </summary> /// <param name="dosCommand">dos命令</param> /// <param name="milliseconds">等待命令執行的時間(單位:毫秒), /// 如果設定為0,則無限等待</param> /// <returns>返回DOS命令的輸出</returns> public static string Execute(string command, int seconds) { string output = ""; //輸出字串 if (command != null && !command.Equals("")) { Process process = new Process();//建立程式物件 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe";//設定需要執行的命令 startInfo.Arguments = "/C " + command;//“/C”表示執行完命令後馬上退出 startInfo.UseShellExecute = false;//不使用系統外殼程式啟動 startInfo.RedirectStandardInput = false;//不重定向輸入 startInfo.RedirectStandardOutput = true; //重定向輸出 startInfo.CreateNoWindow = true;//不建立視窗 process.StartInfo = startInfo; try { if (process.Start())//開始程式 { if (seconds == 0) { process.WaitForExit();//這裡無限等待程式結束 } else { process.WaitForExit(seconds); //等待程式結束,等待時間為指定的毫秒 } output = process.StandardOutput.ReadToEnd();//讀取程式的輸出 } } catch(Exception ex) { Console.WriteLine(ex.Message);//捕獲異常,輸出異常資訊 } finally { if (process != null) process.Close(); } } return output; } } }
這裡呼叫DOS,執行檢視版本的命令,然後獲取執行結果,輸出如下:
直接輸出結果,一點也不拖泥帶水,是不是感覺很好!
下面來說下,如何執行批處理程式,即bat結尾的檔案,程式碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace WinShell { class Program { static void Main(string[] args) { Process pro = new Process(); pro.StartInfo.FileName = @"d:\1.bat"; pro.StartInfo.UseShellExecute = false; pro.StartInfo.RedirectStandardInput = false; pro.StartInfo.RedirectStandardOutput = true; pro.Start(); string result = pro.StandardOutput.ReadToEnd(); Console.WriteLine(result); }
這個更加簡單,直接把FileName的屬性設定為批處理檔案,將有Windows呼叫DOS執行,並且返回結果。
同理,我們可以通過DOS呼叫其他的很多程式。