C#执行外部程序之执行DOS命令和批处理

简介: 在项目开发中,有时候要处理一些文件,比如视频格式的转换,如果用C开发一套算法,再用C#调用,未免得不偿失!有时候调用现有的程序反而更加方便。今天就来说一下C#中如何调用外部程序,执行一些特殊任务。 这里演示调用cmd.exe,即我们常用的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调用其他的很多程序。

 

目录
相关文章
|
26天前
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
|
22天前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
115 56
|
12天前
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
34 3
|
16天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
29天前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
43 0
|
1月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
56 0
|
2月前
|
C# 容器
C#中的命名空间与程序集管理
在C#编程中,`命名空间`和`程序集`是组织代码的关键概念,有助于提高代码的可维护性和复用性。本文从基础入手,详细解释了命名空间的逻辑组织方式及其基本语法,展示了如何使用`using`指令访问其他命名空间中的类型,并提供了常见问题的解决方案。接着介绍了程序集这一.NET框架的基本单位,包括其创建、引用及高级特性如强名称和延迟加载等。通过具体示例,展示了如何创建和使用自定义程序集,并提出了针对版本不匹配和性能问题的有效策略。理解并善用这些概念,能显著提升开发效率和代码质量。
89 4
|
1月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
65 0
|
2月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
54 2
|
3月前
|
监控 JavaScript 前端开发
JAVA常用的DOS命令
JAVA常用的DOS命令