情况:
我的后台服务在不停的运行,虽然可以采用写日志的方式,来监看后台服务的运行.比较麻烦而且不容易调试。
需求:
在服务运行期间,有异常什么的可以通过控制台进行显示。现状:
我网上看了很多代码都主要是将拦截SHELL的,怎么显示消息都没说。经过尝试之后还是只能把控制台调用出来, 不能让控制太帮我显示消息?请有经验的高手看看。
我的后台服务在不停的运行,虽然可以采用写日志的方式,来监看后台服务的运行.比较麻烦而且不容易调试。
需求:
在服务运行期间,有异常什么的可以通过控制台进行显示。现状:
我网上看了很多代码都主要是将拦截SHELL的,怎么显示消息都没说。经过尝试之后还是只能把控制台调用出来, 不能让控制太帮我显示消息?请有经验的高手看看。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;namespace RunCMD
{
/**
* 作者:周公
* blog:http://blog.csdn.net/zhoufoxcn
* 日期:2007-07-07
*
* */
public partial class CMDForm : Form
{
public CMDForm()
{
InitializeComponent();
} private void btnExecute_Click(object sender, EventArgs e)
{
tbResult.Text = "";
ProcessStartInfo start = new ProcessStartInfo("Ping.exe");//设置运行的命令行文件问ping.exe文件,这个文件系统会自己找到
//如果是其它exe文件,则有可能需要指定详细路径,如运行winRar.exe
start.Arguments = txtCommand.Text;//设置命令参数
start.CreateNoWindow = true;//不显示dos命令行窗口
start.RedirectStandardOutput = true;//
start.RedirectStandardInput = true;//
start.UseShellExecute = false;//是否指定操作系统外壳进程启动程序
Process p=Process.Start(start);
StreamReader reader = p.StandardOutput;//截取输出流
string line = reader.ReadLine();//每次读取一行
while (!reader.EndOfStream)
{
tbResult.AppendText(line+" ");
line = reader.ReadLine();
}
p.WaitForExit();//等待程序执行完退出进程
p.Close();//关闭进程
reader.Close();//关闭流
}
}
}
C#中运行命令行截取输出流的例子
说明:经常有朋友问如何在C#中运行一个dos命令,并截取输出、输出流的问题,这个问题我以前在Java中实现过,由于在C#中没有遇到过类似的 情况,为了避免每次别人问都要一遍一遍演示的情况,特地做了一个简单的例子,实现在WinForm中ping一个网站,并且将ping的结果显示在一个文本框中。
人家是windows服务,不是一个console program.最可靠的方法还是做一个控制(监控程序)来与服务进程间通信,就像SQL Server Agent, IIS Admin那样.
可能是我的意思还没有表明白。
1、我的主程序是服务。
2、我希望我的主程序在与遇到异常或需要写日志的时候能够调用控制台显示主程序发送的内容【就像JAVA那种】。有几点需要说明
我需要显示窗体
start.CreateNoWindow = false;//不显示dos命令行窗口
我只需向想控制台发送我要显示的消息,不需要输入。zhoufoxcn
各种方式都尝试过。
目前测试的是
从WinForm作为主程序,调用控制台显示
测试的结果
能够显示控制台,但是不能显示发送的内容【这也是最关键的】