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

本文实现了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();

以上是 C#隐式运行CMD命令(隐藏命令窗口) 的全部内容, 来源链接: utcz.com/z/354172.html

回到顶部