如何使用Topshelf与.NET泛型主机建立Windows服务
2021-04-04 21:00
826 查看
1 前置阅读
在阅读本文章之前,你可以先阅读:
- Topshelf一个用于使用.NET构建Windows服务框架
2 使用
2.1 创建应用程序
首先,创建一个新的控制台应用程序并从nuget获取Topshelf和Microsoft.Extensions.Hosting软件包
Topshelf Microsoft.Extensions.Hosting
当然我们也需要安装Serilog相关的日志框架。
Serilog.Extensions.Hosting Serilog.Settings.Configuration Serilog.Sinks.Console Serilog.Sinks.File Topshelf.Serilog
2.2 创建.NET泛型主机
然后,我们先建立CreateHostBuilder()方法,并加载了Serilog日志并依赖注入MyService和AppSettings,MyService类做为Topshelf所使用的主要逻辑程序,它会提供Start()和Stop()做为Topshelf执行或停止主要逻辑程序的动作。
class Program { static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); } public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .UseSerilog() .ConfigureServices((hostContext, services) => { services.Configure<AppSettings>(hostContext.Configuration); services.AddTransient<MyService>(); }); }
2.3 在Topshelf中注册服务
接着,在Topshelf中注册我们的服务类。跳转到Program.cs并添加:
class Program { static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); RunWindowsServiceWithHost(host); } private static void RunWindowsServiceWithHost(IHost host) { var rc = HostFactory.Run(x => { x.UseSerilog(); x.SetDisplayName("我的服务"); x.SetDescription("我的服务详细描述"); x.SetServiceName("MyService"); var myService = host.Services.GetRequiredService<MyService>(); x.Service<MyService>(s => { s.ConstructUsing(() => myService); s.WhenStarted(tc => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); x.StartAutomatically(); }); var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); Environment.ExitCode = exitCode; } }
2.4 MyService类
接着,我们看看MyService类,主要演示了注入ILogger和AppSettings。
public class MyService { private readonly ILogger logger; private readonly AppSettings settings; public MyService(IOptions<AppSettings> settings, ILogger<MyService> logger) { this.settings = settings.Value; this.logger = logger; } public void Start() { logger.LogInformation($"Starting {this.settings.ServiceName}..."); } public void Stop() { logger.LogInformation($"Stopping {this.settings.ServiceName}..."); } }
2.5 运行应用程序
最后,F5执行应用程序,如果一切顺利,你应该会看到类似以下内容的信息:
相关文章推荐
- windows 2003 如何利用远程桌面来设置主机密码,或是直接使用主机声卡
- 使用Topshelf创建Windows 服务
- C#/.NET基于Topshelf创建Windows服务程序及服务的安装和卸载(极速,简洁)
- 使用.NET 创建Windows系统服务及安装完全教程
- 如何在 Linux/Windows/MacOS 上使用 .NET 进行开发
- .NET下windows服务使用心得
- windows下如何正确使用Jconsole远程连接linux主机上的JVM
- 如何在windows 2000下通过Cygwin建立CVS服务
- 在Windows服务中如何使用计时器?
- .net 中用TopShelf 实现windows服务
- 如何从客户端 JavaScript 调用 .NET Web 服务使用 InternetExplorer 和 MSXML
- 如何使用一套Windows服务代码,运行多个服务
- 使用.net开发并生成Windows服务安装包
- 使用Topshelf创建Windows 服务
- 【原创翻译】如何在本地主机上使用tbdev建立一台bt Tracker服务器【网站建
- ruby进行rpc服务的建立,并且设置端口号(XMLRPC 及 ruby的xmlrpc如何使用)
- 使用Topshelf创建Windows 服务
- 使用Topshelf创建Windows 服务
- 在win7下如何建立ftp服务(Windows自带或采用FileZilla Server软件)
- 使用Topshelf组件 一步一步创建 Windows 服务