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调用其他的很多程序。

  • 相关阅读:
    507. Perfect Number(LeetCode)
    1. Two Sum(LeetCode)
    9. Palindrome Number(LeetCode)
    141. Linked List Cycle(LeetCode)
    [leetcode] 82. Remove Duplicates from Sorted List II
    [leetcode] 81. Search in Rotated Sorted Array II
    [leetcode] 78. Subsets
    [leetcode] 49. Group Anagrams
    BETA先验概率密度曲线的绘制
    VC常见问题处理方法
  • 原文地址:https://www.cnblogs.com/yunfeifei/p/3977420.html
Copyright © 2011-2022 走看看