代碼地址: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; } }
④建立 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 在咱們的電腦上就會存在這個服務,若是運行就會一直執行你的代碼