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();
时间: 2024-10-27 18:40:46

C#隐式运CMD命令的相关文章

C#隐式执行CMD命令

本文实现C#隐式执行CMD功能命令.下图是示例程序的主界面. 在命令文本框输入DOS命令,点击"Run"button.在以下的文本框中输出执行结果. 以下是程序的完整代码. 本程序没有使用p.StandardOutput.ReadtoEnd()和p.StandardOutput.ReadLine()方法来获得输出,由于这些方法运行后画面easy卡死. 而是通过调用异步方法BeginOutputReadLine来获取输出.并在事件p.OutputDataReceived的事件处理方法中来

C#中隐式操作CMD命令行窗口

原文:C#中隐式操作CMD命令行窗口 MS的CMD命令行是一种重要的操作界面,一些在C#中不那么方便完成的功能,在CMD中几个简单的命令或许就可以轻松搞定,如果能在C#中能完成CMD窗口的功能,那一定可以使我们的程序简便不少. 下面介绍一种常用的在C#程序中调用CMD.exe程序,并且不显示命令行窗口界面,来完成CMD中各种功能的简单方法. 如下所示: System.Diagnosties.Process p=new System.Diagnosties.Process(); p.StartIn

C#中隐式运行CMD命令行窗口的方法

using System; using System.Diagnostics; namespace Business { /// <summary> /// Command 的摘要说明. /// </summary> public class Command { private Process proc = null; /// <summary> /// 构造方法 /// </summary> public Command() { proc = new Pr

使用cmd命令打开Python文件式程序方法

首先:需要确定已编好的Python程序的存储路径:(即在哪个磁盘,哪个文件中) 其次:打开cmd命令,输入该程序所在磁盘,敲回车键:(例如其存储在E盘,则输入“E:”,敲回车键.) 然后:输入python.exe 文件路径 文件名:(例如:python.exe e:\下雨了\py\1.1.py) 最后:敲回车键.

Makefile中的隐式规则

Makefile中的隐式规则 1.隐式规则中的变量 隐式规则中使用的变量分成两种:一种是命令相关的,如"CC":一种是参数相关的,如"CFLAGS". 与命令相关的变量 变量 含义 AR 函数库打开包程序.默认命令是"ar" AS 汇编语言编译程序.默认命令是"as" CC C语言编译程序.默认命令是"cc" CXX C++语言编译程序.默认命令是"g++" CO 从RCS文件中扩展文件

python cmd命令调用

关于python调用cmd命令: 主要介绍两种方式: 1.python的OS模块. OS模块调用CMD命令有两种方式:os.popen(),os.system(). 都是用当前进程来调用. os.system是无法获取返回值的.当运行结束后接着往下面执行程序.用法如:OS.system("ipconfig"). OS.popen带返回值的,如何获取返回值.如 p=os.popen(cmd) print p.read().得到的是个字符串. 这两个都是用当前进程来调用,也就是说它们都是阻

Effective C++ -----条款41:了解隐式接口和编译期多态

classes和templates都支持接口(interface)和多态(polymorphism). 对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtual函数发生于运行期. 对template参数而言,接口是隐式的(implicit),奠基于有效表达式.多态则是通过template具现化和函数重载解析(function overloading resolution)发生于编译期.

浅拷贝,深拷贝,隐式共享

1.浅拷贝: 浅拷贝就比如像引用类型 浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同).对其中任何一个对象的改动都会影响另外一个对象.举个例子,一个人一开始叫张三,后来改名叫李四了,可是还是同一个人,不管是张三缺胳膊少腿还是李四缺胳膊少腿,都是这个人倒霉. 2.深拷贝: 而深拷贝就比如值类型. 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响.举个例子,一个人名叫张三,后来用他克隆(假设法律允许)了另外一个人,叫李四,不管是张三缺胳膊

数据类型回顾——数据类型转换(显式和隐式)—JS学习笔记2015-6-3(第47天)

对于JS这种语言来说,因为它是一种动态类型语言,变量是没有类型的,可以随时赋予任意值. 但是,数据本身和各种运算是有类型的,因此运算时变量需要转换类型. 大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换. 首先看下强制类型转换(显式) 之前提到的Namber.parseInt.parseFloat 都是强制类型转换: 这里在看阮一峰博客(http://javascript.ruanyifeng.com/grammar/conversion.html#toc1) Number方法