TopShelf+Quartz.net 实现window服务
Posted sea1ee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TopShelf+Quartz.net 实现window服务相关的知识,希望对你有一定的参考价值。
Quartz.NET官网 TopShelf 网址
代码地址:https://github.com/SeaLee02/ProjectDemo/tree/master/WindowServerDemo
①新建一个控制台 WindowServerDemo ②下载nuget包
Topshelf
Topshelf.Log4Net --附带 log4net
Quartz
Quartz.Jobs
Quartz.Plugins --不然在获取的会报错StdSchedulerFactory.GetDefaultScheduler().Result
③创建 ServiceRunner 类来开始服务
public class ServiceRunner:ServiceControl, ServiceSuspend { private readonly IScheduler scheduler; public ServiceRunner() { scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; } /// <summary> /// 线程开始方法 /// </summary> /// <param name="hostControl"></param> /// <returns></returns> public bool Start(HostControl hostControl) { scheduler.Start(); MyLoggerManager.AppLogger.InfoFormat("线程开始"); return true; } /// <summary> /// 线程结束 /// </summary> /// <param name="hostControl"></param> /// <returns></returns> public bool Stop(HostControl hostControl) { scheduler.Shutdown(false); MyLoggerManager.AppLogger.InfoFormat("线程结束"); return true; } public bool Continue(HostControl hostControl) { scheduler.ResumeAll(); return true; } public bool Pause(HostControl hostControl) { scheduler.PauseAll(); return true; } }
④创建 MyJob类实现完成的方法
/// <summary> /// job(可以设置多个job,频率设置不一样,就会执行各自的方法) /// </summary> public class MyJob: IJob { /// <summary> /// 执行的入口,你的业务 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Execute(IJobExecutionContext context) { //每过多长时间会执行这个方法 await Console.Out.WriteLineAsync($"{DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss")} 开始执行服务"); } }
⑤Program 开始执行
public static void Test() { //需要配置使用log4net FileInfo log = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"); XmlConfigurator.ConfigureAndWatch(log); HostFactory.Run(x => { x.UseLog4Net(); x.Service<ServiceRunner>(); x.RunAsLocalSystem(); x.SetDescription("WindowServerDemo服务的描述"); //设置服务的描述 x.SetDisplayName("WindowServerDemo显示名称"); //服务显示的名称 x.SetServiceName("WindowServerDemo服务名称"); //服务名称 }); }
⑥ log4net.config ,quartz.config ,quartz_jobs.xml 属性都需要设置为如果较新则复制
效果:
安装,启用,暂停,删除服务
把*.bat跟我们的exe程序放到同一个目录,右键管理员运行*.bat
在我们的电脑上就会存在这个服务,如果运行就会一直执行你的代码
以上是关于TopShelf+Quartz.net 实现window服务的主要内容,如果未能解决你的问题,请参考以下文章
quartz3.0.7和topshelf4.2.1实现任务调度