c#中重定向windows控制台程序的输出信息

这个问题来自论坛提问,答案如下.这只是一个简单的ipconfig命令.如果是复杂的,比如oracle的exp之类的命令,能在调用的时候显示出来,还是相当酷的.

using System;
using System.Windows.Forms;

namespace WindowsApplication8
...{
  public partial class Form1 : Form
  ...{
    public Form1()
    ...{
      InitializeComponent();
    }

    delegate void dReadLine(string strLine);
    private void excuteCommand(string strFile, string args, dReadLine onReadLine)
    ...{
      System.Diagnostics.Process p = new System.Diagnostics.Process();
      p.StartInfo = new System.Diagnostics.ProcessStartInfo();
      p.StartInfo.FileName = strFile;
      p.StartInfo.Arguments = args;
      p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
      p.StartInfo.RedirectStandardOutput = true;
      p.StartInfo.UseShellExecute = false;
      p.StartInfo.CreateNoWindow = true;
      p.Start();
      System.IO.StreamReader reader = p.StandardOutput;//截取输出流
      string line = reader.ReadLine();//每次读取一行
      while (!reader.EndOfStream)
      ...{
        onReadLine(line);
        line = reader.ReadLine();
      }
      p.WaitForExit();
    }

    private void button1_Click(object sender, EventArgs e)
    ...{
      excuteCommand("ipconfig", "", new dReadLine(PrintMessage));
    }
    private void PrintMessage(string strLine)
    ...{
      this.textBox1.Text += strLine + " ";
    }
  }
}

时间: 2024-10-27 13:12:40

c#中重定向windows控制台程序的输出信息的相关文章

windows service 程序的输出信息如何显示到dos窗口

问题描述 windows service 程序的输出信息如何显示到dos窗口 我创建了一个Windows的服务程序,其中写了一些调式的日志信息,现在在服务启动运行的时候想让日志信息在dos窗口显示出来,让我能看到调式的结果,应该怎么调用? Windows service程序是不是可以显示dos窗口? 解决方案 写日志文件或用Debug.WriteLine输出,用DegbuView工具查看.可参考:http://blog.csdn.net/fengyily/article/details/2281

编写自己的IDE:如何在图形界面中实时捕获控制台程序的标准输出

编写自己的"IDE"-- 如何在图形界面中实时捕获控制台程序的标准输出. IDE是集成开发环境(Integrated Development Environment)的简称.印象里有很多出色的IDE,比如JBuilder和Kylix,比如Visual Studio.不知大家是否留意过,大多数IDE本身只提供代码编辑.工程管理等人机交互功能,我们在IDE中编译代码.调试程序时,IDE需要调用命令行的编译器.调试器完成相应的操作.例如,使用Visual Studio编译C++程序时,我们会

在C#中调试Windows窗体程序

在控制台应用程序中Main函数是程序的入口点.同样地,在Windows窗体应用程序中,Main函数也是程序入口点.这可以通过调试看出来,方法如下所示. (1)打开或新建一个Windows窗体应用程序,如前面的FormsTest应用程序. (2)单击"调试"|"逐句调试"命令,也可以按快捷键F11.可以看到,程序会跳转到Program.cs文件.指示运行的黄色箭头指向Main函数的起始位置. (3)继续按F11键,直到运行箭头移动到函数最后一句,代码如下所示. App

windows控制台程序自动重启

有时控制台程序由于日志更改或其他原因需要定时重启,在Linux平台有很多工具可以实现,但是windows命令有限,实现起来有些麻烦.最近有个项目需要处理这种情况,搜索了很久,并写了一些代码才解决.程序为java编写,要重启需要解决两个问题--杀掉java进程和重启启动程序.这里还有一个隐含的问题,如果杀掉进程后马上启动新的程序,有的时候会出现两个后果交叉的情况,虽然程序是先调用了杀进程再启动,但是启动的进程又被杀掉了.为了避免这种情况出现,在两个操作之间需要延时一会.这样,问题就归结为:1 杀掉

请问C#在通过命令行调用另一个程序的时候,如何让另一个程序的输出信息在新窗口中显示

问题描述 情况是这样的,我用C++写了一个程序,可以在黑窗口显示信息并且可以运行完,然后我用命令行调用C++生成的.exe文件的时候也能够运行结束并且显示信息,但是当我用C#调用的时候,C++程序始终在运行不结束,于是我就想用黑窗口看信息,结果始终看不到信息,不知道应该怎么写,而且由于程序始终在运行,我也无法在其运行结束后获取信息输出,所以我现在完全不知道问题出在哪里,所以还是想用黑窗口看一下信息,我现在的代码是下面这样的,想问问应该怎么改能看到信息Processp=newProcess();p

windows应用程序中获取控制台输出信息

问题描述 我在一个C#Windows应用程序中启动一个控制台程序,这个控制台程序输了很多信息我怎么才能在C#windows应用程序中获得这些信息 解决方案 解决方案二:是不是什么重定向??学习解决方案三:专业接分,参考http://blog.csdn.net/jinjazz/archive/2008/05/07/2413039.aspx解决方案四:引用2楼jinjazz的回复: 专业接分,参考http://blog.csdn.net/jinjazz/archive/2008/05/07/2413

x64位windows上程序开发的注意事项

在Windows上面32位与64位的区别有: 1.指针大小的区别,sizeof(int *)在32bit下面是4个字节,在64bit下面是8个字节 2.size_t的区别,size_t在32bit下面是4个字节的范围,在64bit下面是8个字节的范围 3.地址空间的区别,在32bit下面,最大地址空间是4GB,在64bit下面是可以大于4GB的 4.32位程序在64位Windows上运行,是有一个Wow64子系统辅助其运行的,默认情况下,访问注册表和某些文件夹是被重定向的 5.指针的区别也意味着

myeclipse用svn插件提交代码时,svn控制台的输出信息有没有保存下来,保存在哪儿?

问题描述 myeclipse用svn插件提交代码时,svn控制台的输出信息有没有保存下来,保存在哪儿? myeclipse用svn插件提交代码时,svn控制台的提交输出信息有没有保存下来,保存在哪儿? 解决方案 右键VisualSVN的仓库里的项目-->查看,就可以在浏览器看到每一次提交的源码. 解决方案二: Windows 下 VisualSVN 强制提交时写入日志信息 设置方法一: 在版本库的路径下比如是 C:Repositoriestesthooks 可以看到 pre-commit.tmp

Windows中控制台程序的全屏模式开关

当你的程序以控制台方式运行时,按下ALT+ENTER可以将屏幕变成全屏模式.但如何在程序中用Win32 API函数来实现这个功能呢?据我所知,微软没有提供有关这方面的任何文档.但是,当用户按下ALT+ENTER时,Windows 9x用如下特殊的加速键ID发送WM_COMMAND消息到控制台窗口. #define ID_SWITCH_CONSOLEMODE 0xE00F 这个加速键ID没有对外公开,所以你在Win32 API的有关文档中找不到关于ID_SWITCH_CONSOLEMODE的内容.