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(); 
  • 相关阅读:
    看K线学炒股(8.10)
    看K线学炒股(8.9)
    看K线学炒股(8.5)
    看K线学炒股(0803)
    看K线学炒股(7.29)
    看K线学炒股(7.21)
    看K线学炒股(2021.07.20)
    看K线学炒股
    说说英力特这只股票
    matlab里的数据转换到Python中去的一个问题
  • 原文地址:https://www.cnblogs.com/arxive/p/6042918.html
Copyright © 2011-2022 走看看