欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-27 12:46:58
本文实现了c#隐式运行cmd命令的功能。下图是实例程序的主画面。在命令文本框输入dos命令,点击“run”按钮,在下面的文本框中输出运行结果。 下面是程序的完整代码。...

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

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

下面是程序的完整代码。本程序没有使用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();