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:<nodata msg='没有新数据需要传输'/></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>
<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:<nodata msg='没有新数据需要传输'/></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();
}
}
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();
}
}
}