zoukankan      html  css  js  c++  java
  • 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();
            }
        }

  • 相关阅读:
    第10章 指针(二) 首地址指针
    第10章 指针(五) 使用地址指针的引用
    第10章 指针(六) 指针小结
    C语言中的类模拟(C++编程思想)
    经典SQL语句大全
    C#ADO.NET操作数据代码汇总
    C#日期格式化
    第10章 指针(四) 地址簿指针变量
    数据库设计中的14个技巧
    第9章 预处理命令
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2661469.html
Copyright © 2011-2022 走看看