摘要:如果我们希望定时任务可以一直运行,那需要将这个控制台应用程序作为服务安装到服务进程中,如何操作呢非常简单的安装和卸载命令。启动恢复服务模式当服务意外停止后自动恢复。设置服务在服务中的显示名称。
本文首发于码友网--一个专注.NET/.NET Core开发的编程爱好者社区。
文章目录C#/.NET基于Topshelf创建Windows服务的系列文章目录:
C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载 (1)
在C#/.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务) (2)
C#/.NET基于Topshelf创建Windows服务的守护程序作为服务启动的客户端桌面程序不显示UI界面的问题分析和解决方案 (3)
前言对于使用Windows操作系统的人来说,Windows Service(Windows服务)应该不会陌生。在Windows操作系统中,我们可以在"运行"窗口中运行service.msc:
即可打开一个查看Windows服务的窗口,如图:
Windows服务基本都是一些后台运行的服务进程,没有UI界面,每个服务处理着各自独立的任务并且有专门的启动或者停止策略。所以,Windows服务在很多情况下会被用来者处理一些定时任务或者调度。
那么,对于.NET的开发者来说,可不可以自己创建Windows服务呢,如何使用C#创建Windows服务呢?
本文就为大家分享一种基于Topshelf创建的Windows服务的方法。
创建Topshelf服务项目首先打开Visual Studio(本文使用的是Visual Studio 2019),打开新建项目的对话框,选择.NET Framework的控制台应用程序(Console App(.NET Framework)),如图:
注:只可选择控制台应用程序
点击"下一步",在项目名称中输入TopshelfDemoService,.NET Framework 选择4.6.2,其中选项根据自己情况填写即可,最后点击"创建"按钮。
安装Topshelf组件在TopshelfDemoService项目中,打开Nuget包管理工具,搜索Topshelf,在搜索结果中选中Topshelf,点击"安装",如图:
编写Topshelf服务的示例程序代码Topshelf组件安装完成后,我们就可以开始编写服务的示例代码了。
首先,创建一个名为HealthMonitorService.cs的类(其作用假设为定时监控某个系统的运行健康状况),在其中分别创建方法:Start()和Stop()以及一个定时器,让定时器定时执行检查系统健康状况的任务(这里模拟的每秒向控制台输出一条文本信息),完整的代码如下:
using System; using System.Timers; namespace TopshelfDemoService { internal class HealthMonitorService { private readonly Timer _timer; public HealthMonitorService() { _timer = new Timer(1000) { AutoReset = true }; _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("执行系统健康检查任务,所有指标均正常。执行时间:{0}", DateTime.Now); } public void Start() { _timer.Start(); } public void Stop() { _timer.Stop(); } } }
再创建一个名为MyServiceConfigure.cs的服务配置类,这个类主要用来配置Topshelf服务的各种运行参数,代码如下:
using System; using Topshelf; namespace TopshelfDemoService { internal class MyServiceConfigure { internal static void Configure() { var rc = HostFactory.Run(host => // 1 { host.Service(service => // 2 { service.ConstructUsing(() => new HealthMonitorService()); // 3 service.WhenStarted(s => s.Start()); // 4 service.WhenStopped(s => s.Stop()); // 5 }); host.RunAsLocalSystem(); // 6 host.EnableServiceRecovery(service => // 7 { service.RestartService(3); // 8 }); host.SetDescription("Windows service based on topshelf"); // 9 host.SetDisplayName("Topshelf demo service"); // 10 host.SetServiceName("TopshelfDemoService"); // 11 host.StartAutomaticallyDelayed(); // 12 }); var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); // 13 Environment.ExitCode = exitCode; } } }
注:其中数字的含义请见本文末尾的解释。
最后,打开Program.cs文件,开启Topshelf服务,如下:
namespace TopshelfDemoService { class Program { static void Main(string[] args) { MyServiceConfigure.Configure(); } } }
好了,完成到这里,整个示例程序就写好了,按F5运行示例程序,你将看到如下类似的控制台信息:
可以看到,我们创建的TopshelfDemoService服务每秒向控制台打印了一条文本信息,这和我们的预期是吻合的。
这样,我们就成功创建了一个基于Topshelf的Windows服务,当然,这也只是一个简单和示例服务程序,其中没有复杂的业务逻辑和配置等等。这些都等待你去发掘。
作为Windows服务安装和卸载我们刚才运行的只是一个控制台应用程序,如果将这个控制台应用程序关掉,定时任务也会被停止了。如果我们希望定时任务可以一直运行,那需要将这个控制台应用程序作为服务安装到Windows服务进程中,如何操作呢?
非常简单的安装和卸载命令。
首先,以管理员身份打开一个命令行工具,进入到控制台应用程序所在目录。
安装
安装服务运行如下命令:
TopshelfDemoService.exe install
打开Windows服务查看窗口(刷新),可以看到Topshelf demo service已经在服务列表中了,如图:
这时,我们只需要按照Windows服务来操作这个服务即可。
卸载
如果需要卸载服务,则运行如下命令:
TopshelfDemoService.exe uninstallTopshelf配置参数说明
1.设置服务主机使用HostFactory.Run()来创建并运行一个Topshelft服务。示例代码托管和下载
2.设置Topshelf使用类型HealthMonitorService作为服务类。
3.配置如何创建一个服务的实例,这里采用的是使用关键字new来实例化一个HealthMonitorService对象,你也可以使用IoCp容器来实例化服务对象。
4.设置当服务启动时执行的操作。
5.设置当服务停止时执行的操作。
6.设置将服务以本地系统身份运行。
7.启动恢复服务模式(当服务意外停止后自动恢复)。
8.设置第一次自动恢复服务的延迟时间为3分钟。
9.设置Topshelf服务在Windows服务中的描述信息。
10.设置Topshelf服务在Windows服务中的显示名称。
11.设置Topshelf服务在Windows服务中的服务名称。
12.设置Topshelf服务随Windows启动时自动运行(延迟)。
13.设置服务的退出代码。
本示例代码托管地址可以在原出处找到:示例代码下载地址
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/61453.html
摘要:本文首发于码友网一个专注开发的编程爱好者社区。只是为了演示,所以客户端并没有实际意义的逻辑和功能,在文件中,添加如下示例代码这是一个由码友网创建的系统示例程序,目前正在运行技术支持码友网仅此而已。 本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区。 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于T...
摘要:重新编译服务程序项目,并将它作为服务安装,最后启动服务。守护进程服务将启动一个带界面的客户端程序。大功告成我是,希望本文的关于服务和守护程序设计对需要的朋友有所帮助。 本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区。 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf创建Window...
摘要:一界面框架是微软在其最新桌面操作系统中使用的图形用户界面。干货盘点二服务在写后台代码的过程中,经常会遇到要写一些多带带的服务。这个传统的控件开发起来很不方面,使用也不友好。发现有用的,这个第三方的框架,集成的很好,用起来也方便。一、Fluent Ribbon界面框架Fluent/Ribbon是微软在其最新桌面操作系统Windows 7中使用的图形用户界面。 Windows平台的进化,伴随着系...
摘要:在目录下创建目录,建议将目录设为。注册并启动服务执行安装服务后面是服务的名字,我们这里以作为的服务名启动服务。登录并修改密码提醒大家,由于初始化设置或版本差异,有些版本安装完成后是空密码,有些是临时密码,我们需要查看日志提示。 导读:我们日常学习可能会需要在本地安装MySQL服务,也遇到过小伙伴探讨关于Windows系统安装MySQL的问题。在这里建议大家安装MySQL5.7版本,当然...
摘要:开始程序安装产品卸装所有产品,但本身不能被删除如果第二步执行失败,跳到第三步,大部份第二步是失败的运行,选择,按键删除这个入口。下所有删除下所有删除下所有删除运行,下所有删除,删除所有入口。在运行框中输入,回车。 Oracle11g的安装教程 同时解压缩两个zip文件,生成一个database文件夹,进入到database文件夹,点击setup showImg(https://segm...
阅读 982·2023-04-26 02:38
阅读 724·2023-04-25 20:13
阅读 3439·2021-11-19 11:31
阅读 2199·2019-08-30 15:55
阅读 2609·2019-08-30 14:11
阅读 3033·2019-08-30 13:45
阅读 1240·2019-08-29 18:41
阅读 1017·2019-08-29 16:18