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#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
网友评论