C#中隐式运行CMD命令行窗口的方法

时间:2021-06-11 18:47:07 

MS的CMD命令行是一种重要的操作界面,一些在C#中不那么方便完成的功能,在CMD中几个简单的命令或许就可以轻松搞定,如果能在C#中能完成CMD窗口的功能,那一定可以使我们的程序简便不少。
下面介绍一种常用的在C#程序中调用CMD.exe程序,并且不显示命令行窗口界面,来完成CMD中各种功能的简单方法。
如下所示:


System.Diagnosties.Process p=new System.Diagnosties.Process();
p.StartInfo.FileName="cmd.exe";//要执行的程序名称
p.StartInfo.UseShellExecute=false;
p.StartInfo.RedirectStanderInput=true;//可能接受来自调用程序的输入信息
p.StartInfo.RedirectStanderOutput=true;//由调用程序获取输出信息
p.StartInfo.CreateNoWindow=true;//不显示程序窗口
p.Start();//启动程序
//向CMD窗口发送输入信息:
p.StanderInput.WriteLine("shutdown -r t 10"); //10秒后重启(C#中可不好做哦)
//获取CMD窗口的输出信息:
string sOutput = p.StandardOutput.ReadToEnd();有啦以下代码,就可以神不知鬼不觉的操作CMD啦。总之,Process类是一个非常有用的类,它十分方便的利用第三方的程序扩展了C#的功能。


详细源码如下:


using System;
using System.Diagnostics;
namespace Business
{
/// <summary>
/// Command 的摘要说明。
/// </summary>
public class Command
{
private Process proc = null;
/// <summary>
/// 构造方法
/// </summary>
public Command()
{
proc = new Process();
}
/// <summary>
/// 执行CMD语句
/// </summary>
/// <param name="cmd">要执行的CMD命令</param>
public void RunCmd(string cmd)
{
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
proc.StandardInput.WriteLine(cmd);
proc.Close();
}
/// <summary>
/// 打开软件并执行命令
/// </summary>
/// <param name="programName">软件路径加名称(.exe文件)</param>
/// <param name="cmd">要执行的命令</param>
public void RunProgram(string programName,string cmd)
{
Process proc = new Process();
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = programName;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
if (cmd.Length != 0)
{
proc.StandardInput.WriteLine(cmd);
}
proc.Close();
}
/// <summary>
/// 打开软件
/// </summary>
/// <param name="programName">软件路径加名称(.exe文件)</param>
public void RunProgram(string programName)
{
this.RunProgram(programName,"");
}
}
}


调用时


Command cmd = new Command();
cmd.RunCmd("dir");

获取输出信息应注意:

ReadtoEnd()容易卡住:


[csharp] view plaincopyprint?string outStr = proc.StandardOutput.ReadtoEnd(); 

 string outStr = proc.StandardOutput.ReadtoEnd();


更倾向于使用ReadLine():


[csharp] view plaincopyprint?string tmptStr = proc.StandardOutput.ReadLine(); 
         string outStr = ""; 
         while (tmptStr != "") 
         { 
             outStr += outStr; 
             tmptStr = proc.StandardOutput.ReadLine(); 
         } 

标签:CMD命令行
0
投稿

猜你喜欢

  • Windows中使用C#为文件夹和文件编写密码锁的示例分享

    2023-09-27 06:27:23
  • 详解Spring 中 Bean 对象的存储和取出

    2023-08-06 02:42:46
  • SpringBoot使用POI进行Excel下载

    2022-06-14 13:16:13
  • Android 自定义来电秀实现总结

    2023-12-17 07:52:32
  • 浅谈java异常链与异常丢失

    2023-10-24 21:53:38
  • C++ deque与vector对比的优缺点

    2023-08-28 13:19:16
  • C#实现启动项管理的示例代码

    2022-07-30 09:09:04
  • android使用gesturedetector手势识别示例分享

    2023-08-08 15:06:11
  • 一篇文章带你深入了解Java类加载

    2023-06-11 22:12:00
  • Spring Boot中如何使用Swagger详解

    2023-09-27 18:13:58
  • Android 如何实现动态申请权限

    2023-07-30 00:51:31
  • 最值得Java开发者收藏的网站

    2022-03-09 15:57:08
  • Android开发实现模仿微信小窗口功能【Dialog对话框风格窗口】

    2022-01-27 10:11:01
  • JavaEE开发之SpringMVC中的自定义消息转换器与文件上传

    2023-11-24 19:36:02
  • mybatis foreach 循环 list(map)实例

    2023-11-23 23:39:05
  • 关于SpringCloudStream配置问题

    2023-08-08 20:12:00
  • java图片格式转换的三段代码

    2023-01-22 05:43:02
  • 一看就懂的Android APP开发入门教程

    2023-07-18 04:10:41
  • 一文详解Spring如何控制Bean注入的顺序

    2022-09-10 18:33:22
  • Java中synchronized关键字引出的多种锁 问题

    2021-06-05 04:42:45
  • asp之家 软件编程 m.aspxhome.com