C#-TopShelf服务创建和运行
在之前的博客《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
参考链接:
以上仅用于学习和总结