TopShelf+Quartz.net 實現window服務

Quartz.NET官網   TopShelf 網址

 代碼地址:https://github.com/SeaLee02/ProjectDemo/tree/master/WindowServerDemohtml

①新建一個控制檯 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 屬性都須要設置爲若是較新則複製

 

 

 

效果:git

安裝,啓用,暫停,刪除服務
把*.bat跟咱們的exe程序放到同一個目錄,右鍵管理員運行*.bat 在咱們的電腦上就會存在這個服務,若是運行就會一直執行你的代碼
相關文章
相關標籤/搜索