c# 控制台程序输入输出流重定向

1、配置文件

 <?xml version="1.0"?>

<configuration>  
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="ShellSrv.Properties.ShellSrv" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            <section name="ShellSrv.ShellSrv" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <ShellSrv.Properties.ShellSrv>
            <setting name="targetExe" serializeAs="String">
                <value>E:\\West.Co\\数据同步\\SyncData\\bin\\Debug\\SyncData.exe</value>
            </setting>
            <setting name="killable" serializeAs="String">
                <value>Y</value>
                <!--是否kill进程默认是'Y'-->
            </setting>
            <setting name="regular" serializeAs="String">
                <value>send recv:&lt;nodata msg='没有新数据需要传输'/&gt;</value>
              <!--符合正则表达式的不输出-->
            </setting>
        </ShellSrv.Properties.ShellSrv>
        <ShellSrv.ShellSrv>
            <setting name="targetExe" serializeAs="String">
                <value>E:\West.Co\数据同步\SyncData\bin\Debug\SyncData.exe</value>
            </setting>
        </ShellSrv.ShellSrv>
    </userSettings>
</configuration>

2、程序代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;

namespace ShellSrv
{
    public partial class Service1 : ServiceBase
    {
        System.Diagnostics.Process p;
        public Service1()
        {
            InitializeComponent();            

        }

        string str_path="";
        string str_regular = "";
        string str_killable = "";

        
        void exec()
        {
            try
            {
                str_path = ShellSrv.Properties.ShellSrv.Default.targetExe;                
                str_regular = ShellSrv.Properties.ShellSrv.Default.regular;                
                str_killable = ShellSrv.Properties.ShellSrv.Default.killable;                

                p = new System.Diagnostics.Process();
                p.StartInfo.FileName = str_path;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.CreateNoWindow = true;
                p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);                
                p.Start();
                p.BeginOutputReadLine();
                
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Data))
            {
                RegexOptions options = RegexOptions.None;
                Regex regex = new Regex(str_regular, options);
                string ls_input = e.Data;


                if (regex.IsMatch(ls_input))
                {
                    return;                  
                }
                else
                {
                    westsoft.data.xml.util.writeLog(ls_input);
                }
            }
        }


        protected override void OnStart(string[] args)
        {
            exec();
        }


        protected override void OnStop()
        {
            str_killable = str_killable == "" ? "Y" : str_killable.ToUpper();
            if (str_killable == "Y")
            {
                p.Kill();
            }
            p.Close();
        }
    }

原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2661469.html