zoukankan      html  css  js  c++  java
  • 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调用其他的很多程序。

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/yunfeifei/p/3977420.html
Copyright © 2011-2022 走看看