在之前的博客《C#-Windows服務創建和運行》
https://www.cnblogs.com/ywkcode/p/11569593.html中,windows服務創建和運行的步驟還是較多。
本文通過引入Topshelf快速搭建和安裝Windows服務。
1.TopShelf簡介
TopShelf是一個開源的Windows服務構建框架,使用TopShelf框架可簡化服務的創建,開發人員只需創建一個簡單的控制台應用程序,就可以安裝windows服務,調試容易和安裝簡便是其最大的優勢
2.TopShelf使用
(1)創建控制台
(2)引入TopShelf的Nuget包
(3)TopShelf配置
1 public class TownCrier 2 { 3 readonly Timer _timer; 4 public TownCrier() 5 { 6 _timer = new Timer(1000) { AutoReset = true }; 7 _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now); 8 } 9 public void Start() { _timer.Start(); } 10 public void Stop() { _timer.Stop(); } 11 } 12 public class Program 13 { 14 15 16 public static void Main(string[] args) 17 { 18 //配置和運行宿主服務 19 HostFactory.Run(x => //1 20 { 21 22 x.Service<TownCrier>(s => //2 23 { 24 //指定服務類型 25 s.ConstructUsing(name => new TownCrier()); //3 26 //當服務啟動后執行 27 s.WhenStarted(tc => tc.Start()); //4 28 //當服務停止后執行 29 s.WhenStopped(tc => tc.Stop()); //5 30 }); 31 //服務通過本地系統賬號裕興 32 x.RunAsLocalSystem(); //6 33 //服務信息描述 34 x.SetDescription("Sample Topshelf Host"); //7 35 //服務顯示名稱 36 x.SetDisplayName("MyTopShelfShowName"); //8 37 //服務名稱 38 x.SetServiceName("MyTopShelfName"); //9 39 }); 40 } 41 }
運行效果如下圖所示:
3.配置運行
(1)找到文件生成目錄bin文件夾下
(2)安裝:TopShelfConsole.exe install
在任務管理器中能查看到我們自定義的服務
(3)啟動:TopShelfConsole.exe start
(4)卸載:TopShelfConsole.exe uninstall
4.配合Quartz實現定時任務
上述的服務類型“TownCrier”比較簡單,無法滿足實際生產需求。
配合Quartz控制任務的執行和調度,Quartz的簡單入門:
https://www.cnblogs.com/ywkcode/p/11110126.html
主要代碼:
1 using System; 2 using System.Timers; 3 using Topshelf; 4 5 namespace TopShelfConsole 6 { 7 8 9 10 public class MyWindowService 11 { 12 public void Start() { JobScheduler.Start(); } 13 public void Stop() { JobScheduler.Stop(); } 14 } 15 public class Program 16 { 17 18 19 public static void Main(string[] args) 20 { 21 //配置和運行宿主服務 22 HostFactory.Run(x => //1 23 { 24 25 x.Service<MyWindowService>(s => //2 26 { 27 //指定服務類型 28 s.ConstructUsing(name => new MyWindowService()); //3 29 //當服務啟動后執行 30 s.WhenStarted(tc => tc.Start()); //4 31 //當服務停止后執行 32 s.WhenStopped(tc => tc.Stop()); //5 33 }); 34 //服務通過本地系統賬號裕興 35 x.RunAsLocalSystem(); //6 36 //服務信息描述 37 x.SetDescription("Sample Topshelf Host"); //7 38 //服務顯示名稱 39 x.SetDisplayName("MyTopShelfShowName"); //8 40 //服務名稱 41 x.SetServiceName("MyTopShelfName"); //9 42 }); 43 } 44 } 45 }
最終顯示的結果:
附源碼:
提取碼:qbxk
參考鏈接:
以上僅用於學習和總結
