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

简介:

原文 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();
    }
  
    private void button1_Click(object sender, EventArgse)
    {
      ExcuteDosCommand(textBox1.Text);
    }
  
    private void ExcuteDosCommand(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 += new DataReceivedEventHandler(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("执行命令失败,请检查输入的命令是否正确!");
      }
    }
  
    private void sortProcess_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(); 
复制代码






相关文章
|
4月前
|
缓存 C#
C# 操作路径(Path)类方法的使用与解析运行实例
C# 操作路径(Path)类方法的使用与解析运行实例
|
6月前
|
C#
C#程序Debug文件夹可以运行,无法调试
C#程序Debug文件夹可以运行,无法调试
|
消息中间件 安全 API
C#实现操作Windows窗口句柄:SendMessage/PostMessage发送系统消息、事件和数据【窗口句柄总结之二】
SendMessage/PostMessage API 可以实现发送系统消息,这些消息可以定义为常见的鼠标或键盘事件、数据的发送等各种系统操作......
3703 1
C#实现操作Windows窗口句柄:SendMessage/PostMessage发送系统消息、事件和数据【窗口句柄总结之二】
|
1月前
|
设计模式 C#
36.c#:如何设置MDL窗口
36.c#:如何设置MDL窗口
15 1
|
1月前
|
C# 开发者
35.c#:winform窗口
35.c#:winform窗口
10 1
|
4月前
|
编译器 应用服务中间件 数据库连接
解决C#运行程序修改数据后数据表不做更新的问题
解决C#运行程序修改数据后数据表不做更新的问题
41 0
|
5月前
|
开发框架 自然语言处理 文字识别
一款C#开发的窗口文本提取开源软件
一款C#开发的窗口文本提取开源软件
45 2
|
6月前
|
C#
命令调用C#程序, 路径参数解析错误
命令调用C#程序, 路径参数解析错误
|
9月前
|
C#
C#利用委托实现命令按钮跨窗体控制
C#利用委托实现命令按钮跨窗体控制
76 0
|
10月前
|
XML 存储 测试技术
在C#下运行Python:IronPython和Pythonnet
在C#下运行Python可能有不同的原因。其中一些原因包括: 1. 使用C#应用程序中不可用的特定Python功能或库。 2. 结合Python的简单性和表现力以及C#的性能和稳健性,完成不同任务。 3. 与基于Python的系统或服务进行集成。
141 0