TopShelf+Quartz.net 实现window服务

2021-06-04 05:04

阅读:444

标签:log   turn   inf   html   windows   run   控制   获取   watch   

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

        /// 
        /// 线程开始方法
        /// 
        /// 
        /// 
        public bool Start(HostControl hostControl)
        {
            scheduler.Start();
            MyLoggerManager.AppLogger.InfoFormat("线程开始");
            return true;
        }

        /// 
        /// 线程结束
        /// 
        /// 
        /// 
        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;
        }
    }
View Code

  

④创建 MyJob类实现完成的方法
  /// 
    /// job(可以设置多个job,频率设置不一样,就会执行各自的方法)
    /// 
    public class MyJob: IJob
    {
        /// 
        /// 执行的入口,你的业务
        /// 
        /// 
        /// 
        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();
                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服务

标签:log   turn   inf   html   windows   run   控制   获取   watch   

原文地址:https://www.cnblogs.com/Sea1ee/p/10859305.html


评论


亲,登录后才可以留言!