cmd-C#隐式运行CMD命令,并获取控制台输出

问题描述

C#隐式运行CMD命令,并获取控制台输出

正在用C#做一个简易的使用mingw的IDE程序,使用cmd.exe中通过gcc命令进行编译链接等操作,想要及时获取 错误以及警告信息 进行输出。

开始时参照 C#程序调用cmd.exe执行命令

代码如下:

 using System.Diagnostics;
public class CmdHelper
    {
        private static string CmdPath = @"C:WindowsSystem32cmd.exe";

        /// <summary>
        /// 执行cmd命令
        /// 多命令请使用批处理命令连接符:
        /// <![CDATA[
        /// &:同时执行两个命令
        /// |:将上一个命令的输出,作为下一个命令的输入
        /// &&:当&&前的命令成功时,才执行&&后的命令
        /// ||:当||前的命令失败时,才执行||后的命令]]>
        /// 其他请百度
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="output"></param>
        public static void RunCmd(string cmd, out string output)
        {
            cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
            using (Process p = new Process())
            {
                p.StartInfo.FileName = CmdPath;
                p.StartInfo.UseShellExecute = false;        //是否使用操作系统shell启动
                p.StartInfo.RedirectStandardInput = true;   //接受来自调用程序的输入信息
                p.StartInfo.RedirectStandardOutput = true;  //由调用程序获取输出信息
                p.StartInfo.RedirectStandardError = true;   //重定向标准错误输出
                p.StartInfo.CreateNoWindow = true;          //不显示程序窗口
                p.Start();//启动程序

                //向cmd窗口写入命令
                p.StandardInput.WriteLine(cmd);
                p.StandardInput.AutoFlush = true;

                //获取cmd窗口的输出信息
                output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();//等待程序执行完退出进程
                p.Close();
            }
        }
    }

但是 StandardOutput.ReadToEnd(); 时常导致假死

于是采用了 StandardOutput.ReadLine();来读取控制台内容并将读取的字符串连接后输出。可行,但效率十分感人,如果是比较复杂的控制台内容造成的效果和ReadToEnd();无异。

然后 http://www.jb51.net/article/67927.htm 目测这篇文章比较可行,可是执行结果是不停新建窗口= =

求解决方案

解决方案

C#如何运行CMD命令?
c#---运行cmd命令
将CMD命令输出到控制台!

时间: 2024-10-30 10:01:08

cmd-C#隐式运行CMD命令,并获取控制台输出的相关文章

vb.net 运行DOS命令并获取运行结果信息

问题描述 如何编写,有现成的程序吗?网上查的这个类好像不行PublicClassConsoleOutputPrivateSubNew()EndSubPrivateSharedgWorkingDirectoryAsString=Environment.GetFolderPath(Environment.SpecialFolder.Personal)PublicSharedPropertyWorkingDirectory()AsStringGetReturngWorkingDirectoryEndG

Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码_Android

Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码 功能 创建5个按钮,隐式启动.发短信.拨号按钮.电话按钮.打开网页按钮.通过使用Intent来完成各自按钮下的功能 代码目录如下 详细代码如下: activity_main.xml代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

用VB编写一个可以在ASP环境下调用的运行CMD命令的组件

有时我们在管理服务器时为了安全起见会禁用Windows Scripting Host,这样能防止某些不法用户利用WSH生成一个WebShell,对服务器造成很大的安全隐患.但如果我们又想禁用WSH,又想使用自己的WebShell用于服务器的管理怎么办呢?这里介绍了一种实现ASP中运行CMD并显示结果的组件编程.希望对大家能有所帮助. 首先我们新建一个ActiveDLL工程,命名为ASPCMD,新建的类命名为CMDShell.在"Project"的"Referenct"

Win7系统运行cmd命令提示“Windows找不到文件”的故障原因及解决方法

  故障原因分析: 一般发生这样的情况,是系统内的文件被删除所导致的. 解决方法: 1.先准备一个U盘,将U盘插入相同版本系统可正常运行cmd命令的计算机中; 2.在该计算机中打开"计算机",依次打开"C:WindowsSystem32",在该文件夹中找到"cmd.exe",并将其复制起来,通过U盘粘贴到无法运行cmd系统中"C:WindowsSystem32"目录下即可. 3.复制好之后,再次运行CMD命令即可正常打开. 以

Win7运行cmd命令提示“Windows找不到文件”的原因及解决方法

  解决步骤: 1.我们先准备一个U盘,将U盘插入相同版本系统可正常运行cmd命令的计算机中; 2.在该计算机中打开"计算机",依次打开"C:WindowsSystem32",在该文件夹中找到"cmd.exe",并将其复制起来,通过U盘粘贴到无法运行cmd系统中"C:WindowsSystem32"目录下即可. 3.复制好之后,我们再次运行CMD命令即可正常打开.

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

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

解决Win7运行cmd命令提示“Windows找不到文件”的方法

故障原因分析: 有可能是cmd命令文件中毒或被删除掉了,所以我们可以尝试恢复一下. 解决方法: 1.先准备一个U盘,将U盘插入相同版本系统可正常运行cmd命令的计算机中; 2.在该计算机中打开"计算机",依次打开"C:\Windows\System32",在该文件夹中找到"cmd.exe",并将其复制起来,通过U盘粘贴到无法运行cmd系统中"C:\Windows\System32"目录下即可. 3.复制好之后,再次运行CMD命

asp.net c#调用运行cmd命令实现方法

ms的cmd命令行是一种重要的操作界面,一些在c#中不那么方便完成的功能,在cmd中几个简单的命令或许就可以轻松搞定,如果能在c#中能完成cmd窗口的功能,那一定可以使我们的程序简便不少. asp教程.net c#源码   using system; using system.diagnostics; namespace business { /// <summary> /// command 的摘要说明. /// </summary> public class command {

运行cmd命令直接进入指定的目录下

运行cmd程序怎样进入指定的文件夹呢 在桌面上新建一个文档,命名为1.txt,如果你想找到C盘的360文件夹,就先在C盘里找到这个文件夹,例如:我的360文件夹在C:\Program Files\360这个路径里. [plain] @ECHO OFF cmd /k cd /d C:\Program Files\360 把上面内容复制粘贴到1.txt里面. 如果你想找到C盘的360文件夹,就先在C盘里找到这个文件夹,例如:我的360文件夹在C:\Program Files\360这个路径里. 把下