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