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

  

④创建 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
在我们的电脑上就会存在这个服务,如果运行就会一直执行你的代码

 

 

 

转载于:https://www.cnblogs.com/Sea1ee/p/10859305.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值