C#中隐式运行CMD命令行窗口的方法
程序员文章站
2023-11-27 21:14:16
ms的cmd命令行是一种重要的操作界面,一些在c#中不那么方便完成的功能,在cmd中几个简单的命令或许就可以轻松搞定,如果能在c#中能完成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();
}