C#创建Windows服务与安装-图解
1.创建windows服务项目
2.右键点击Service1.cs,查看代码, 用于编写操作逻辑代码
3.代码中OnStart用于执行服务事件
public partial class Service1 : ServiceBase
{
string logFilePath = "";
LogHelper logHelper;
WendyWuBll bll = new WendyWuBll();
public Service1()
{
logFilePath = ConfigurationManager.AppSettings["syncFeefoDataLog"];
logHelper = new LogHelper(logFilePath);
InitializeComponent();
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = e.ExceptionObject as Exception;
logHelper.WriteLine("来自“MonitorOnServer”的全局异常。" + ex.Message + "详细信息如下:"
+ Environment.NewLine + "[InnerException]" + ex.InnerException
+ Environment.NewLine + "[Source]" + ex.Source
+ Environment.NewLine + "[TargetSite]" + ex.TargetSite
+ Environment.NewLine + "[StackTrace]" + ex.StackTrace);
}
catch { }
}
private delegate void NewTaskDelegate();
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("同步feefo数据服务启动"); //在系统事件查看器里的应用程序事件里来源的描述
logHelper.WriteLine("服务启动"); //自定义日志
logHelper.WriteLine("服务版本1.1");
NewTaskDelegate task = bll.IntData;
//使用BeginInvoke方法异步调用newTask方法,并传入2000作为newTask的参数
IAsyncResult asyncResult = task.BeginInvoke( null, null);
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 1000;
t.Elapsed+=new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间时候执行事件
t.AutoReset = true;//设置执行一次(false)还是一直执行(true)
t.Enabled = true;//是否执行system.Timers.Timer.ElapseEventHander事件
bll.SetServiceStatus("WendyWuAutoService", "Running");
}
private void ChkSrv(object sender, System.Timers.ElapsedEventArgs e)
{
int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
if ((intMinute == 00 && intSecond == 00) || (intMinute == 30 && intSecond == 00))//定时设置,判断每天八点执行
{
try
{
logHelper.WriteLine("开始从feefo同步数据");
System.Timers.Timer tt = (System.Timers.Timer)sender;
bll.SyncDataFromFeefo();
logHelper.WriteLine("从feefo同步数据完成");
}
catch(Exception ex)
{
logHelper.WriteLine(ex.Message);
}
}
else if ((intMinute == 15 && intSecond == 00) || (intMinute == 25 && intSecond == 00) || (intMinute == 35 && intSecond == 00) || (intMinute == 45 && intSecond == 00) || (intMinute == 55 && intSecond == 00))
{
try
{
logHelper.WriteLine("自动邮件发送服务启动" + DateTime.Now.ToString());
bll.SendEmail();
logHelper.WriteLine("邮件发送完成" + DateTime.Now.ToString());
}
catch(Exception ex)
{
logHelper.WriteLine(ex.Message);
}
}
}
protected override void OnStop()
{
logHelper.WriteLine("服务停止");
EventLog.WriteEntry("同步feefo数据服务停止");
bll.SetServiceStatus("WendyWuAutoService", "Stopped");
}
}
安装服务配置
1.打开Service1.cs视图界面
2.在视图内右键-->添加安装程序
3.
项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件
serviceProcessInstaller1
serviceInstaller1
4.选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem
5. 选中serviceInstaller1组件,查看属性
设置ServiceName的值, 该值表示在系统服务中的名称
设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动
设置Description,添加服务描述
安装服务
1.点击 开始,运行中输入cmd,获取命令提示符
win7需要已管理员的身份启动,否则无法安装
2.
输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车
切 换当前目录,此处需要注意的是,在C:\Windows\Microsoft.NET\Framework目录下有很多类似版本,具体去哪个目录要看项目 的运行环境,例 如果是.net framework2.0则需要输入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
3.
输入 InstallUtil.exe E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe 回车
说明:E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTest.exe表示项目生成的exe文件位置
4.打开服务,就可以看到已经安装的服务了
卸载服务
-
卸载很简单,打开cmd, 直接输入 sc delete WinServiceTest便可
浙公网安备 33010602011771号