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

C#隐式运行CMD命令(隐藏命令窗口)

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文实现了c#隐式运行cmd命令的功能。下图是实例程序的主画面。在命令文本框输入dos命令,点击“run”按钮,在下面的文本框中输出运行结果。 下面是程序的完整代码。

本文实现了c#隐式运行cmd命令的功能。下图是实例程序的主画面。在命令文本框输入dos命令,点击“run”按钮,在下面的文本框中输出运行结果。

下面是程序的完整代码。本程序没有使用p.standardoutput.readtoend()和p.standardoutput.readline()方法来获得输出,因为这些方法执行后画面容易卡死。而是通过调用异步方法beginoutputreadline来获取输出,并在事件p.outputdatareceived的事件处理方法中来处理结果。

using system;
using system.diagnostics;
using system.io;
using system.windows.forms;

 
namespace rundoscommandform
{
  publicpartialclassform1 : form
  {
    publicform1()
    {
      initializecomponent();
    }
 
    privatevoidbutton1_click(object sender, eventargse)
    {
      excutedoscommand(textbox1.text);
    }
 
    privatevoidexcutedoscommand(string cmd)
    {
      try
      {
        process p = newprocess();
        p.startinfo.filename = "cmd";
        p.startinfo.useshellexecute = false;
        p.startinfo.redirectstandardinput = true;
        p.startinfo.redirectstandardoutput = true;
        p.startinfo.redirectstandarderror = true;
        p.startinfo.createnowindow = true;
        p.outputdatareceived += newdatareceivedeventhandler(sortprocess_outputdatareceived);
        p.start();
        streamwriter cmdwriter = p.standardinput;
        p.beginoutputreadline();
        if (!string.isnullorempty(cmd))
        {
          cmdwriter.writeline(cmd);
        }
        cmdwriter.close();
        p.waitforexit();
        p.close(); 
      }
      catch(exception ex)
      {
        messagebox.show("执行命令失败,请检查输入的命令是否正确!");
      }
    }
 
    privatevoidsortprocess_outputdatareceived(object sender,datareceivedeventargs e)
    {
      if(!string.isnullorempty(e.data))
      {
        this.begininvoke(newaction(() => { this.listbox1.items.add(e.data);}));         
      }
    }
  }
}

我们还可以将需要运行的cmd命令保存为bat文件,再使用process类来执行。

process p = new process();//设定调用的程序名,不是系统目录的需要完整路径 
p.startinfo.filename = "cmd.bat";//传入执行参数 
p.startinfo.arguments = "";
p.startinfo.useshellexecute = false;//是否重定向标准输入 
p.startinfo.redirectstandardinput = false;//是否重定向标准转出 
p.startinfo.redirectstandardoutput = false;//是否重定向错误 
p.startinfo.redirectstandarderror = false;//执行时是不是显示窗口 
p.startinfo.createnowindow = true;//启动 
p.start();
p.waitforexit();
p.close(); 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网