1. 程式人生 > >TopShelf+Quartz.net 實現window服務

TopShelf+Quartz.net 實現window服務

exe程序 屬性 easy latest onf runner 效果 新建 suspend

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
在我們的電腦上就會存在這個服務,如果運行就會一直執行你的代碼
技術分享圖片

 

TopShelf+Quartz.net 實現window服務