C#執行外部程序之執行DOS命令和批處理


在項目開發中,有時候要處理一些文件,比如視頻格式的轉換,如果用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調用其他的很多程序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM