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

 更新时间:2011年04月30日 12:21:03   作者:  
下面介绍一种常用的在C#程序中调用CMD.exe程序,并且不显示命令行窗口界面,来完成CMD中各种功能的简单方法。

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(); 
         } 

相关文章

  • C#使用SendMessage实现进程间通信的方法

    C#使用SendMessage实现进程间通信的方法

    这篇文章主要介绍了C#使用SendMessage实现进程间通信的方法,涉及C#中SendMessage方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C# InitializeComponent()方法案例详解

    C# InitializeComponent()方法案例详解

    这篇文章主要介绍了C# InitializeComponent()方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 两路归并的数组与链表的实现方法

    两路归并的数组与链表的实现方法

    本篇文章对两路归并的数组与链表的实现方法进行了分析介绍。需要的朋友参考下
    2013-05-05
  • c# 用ELMAH日志组件处理异常

    c# 用ELMAH日志组件处理异常

    这篇文章主要介绍了c# 用ELMAH日志组件处理异常,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C#非矩形窗体实现方法

    C#非矩形窗体实现方法

    这篇文章主要介绍了C#非矩形窗体实现方法,涉及C#窗体操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C#深度优先搜索算法

    C#深度优先搜索算法

    这篇文章主要介绍了C#深度优先搜索算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 详细介绍C# 泛型

    详细介绍C# 泛型

    这篇文章主要介绍了C# 泛型的相关资料,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下
    2020-08-08
  • C#生成带二维码的专属微信公众号推广海报实例代码

    C#生成带二维码的专属微信公众号推广海报实例代码

    这篇文章主要给大家介绍了关于利用C#如何生成带二维码的专属微信公众号推广海报的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们一起来看看吧
    2018-12-12
  • C#中while循环语句用法实例详解

    C#中while循环语句用法实例详解

    这篇文章主要介绍了C#中while循环语句用法,以实例形式详细分析了while语句的用法,并对return,continue,break的区别做了进一步的分析,需要的朋友可以参考下
    2014-10-10
  • C#使用Json.Net进行序列化和反序列化及定制化

    C#使用Json.Net进行序列化和反序列化及定制化

    在本篇文章里小编给大家分享了关于C#使用Json.Net进行序列化和反序列化及定制化的知识点总结,需要的朋友们参考学习下。
    2019-05-05

最新评论