当前位置: 移动技术网 > IT编程>开发语言>c# > C#中隐式运行CMD命令行窗口的方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网