• 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();
            }
        }

  • 相关阅读:
    cogs 896. 圈奶牛
    bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
    bzoj 1007: [HNOI2008]水平可见直线
    bzoj 3673: 可持久化并查集 by zky
    bzoj 3545: [ONTAK2010]Peaks
    bzoj 1901: Zju2112 Dynamic Rankings
    动态 K th
    poj 2104 K-th Number
    bzoj 3657 斐波那契数列(fib.cpp/pas/c/in/out)
    青蛙的约会
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2661469.html
Copyright © 2020-2023  润新知