zoukankan      html  css  js  c++  java
  • 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(); 
  • 相关阅读:
    Delphi异常处理try except语句和try finally语句用法以及区别
    test
    Infopath resource
    C# IDE
    操作数据库
    不同版本数据库的导入
    workflow for sharepoint 2007
    http://www.cnblogs.com/BearStudyHard/archive/2008/03/26/1123267.html
    深入浅出InfoPath——安装VSTO
    如何使用Lotuscript管理Excel中的工作表?
  • 原文地址:https://www.cnblogs.com/arxive/p/6042918.html
Copyright © 2011-2022 走看看