使用Topshelf部署.net core windows服务
2020-07-14 06:54
936 查看
使用Topshelf部署.net core windows服务
首先新建一个.net core的模板worker程序
过程 略
打开Program.cs
namespace TopshelfDemo{ public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }}
nuget 安装Topshelf
略
改写下Program.cs
public class Program { public static void Main(string[] args) { HostFactory.Run(x => { x.Service<IHost>(s => { s.ConstructUsing(() => CreateHostBuilder(args).Build()); s.WhenStarted(service => { service.Start(); }); s.WhenStopped(service => { service.StopAsync(); }); }); x.StartAutomatically(); x.RunAsLocalSystem(); x.SetServiceName("TopshelfDemo.ServiceName"); x.SetDisplayName("TopshelfDemo.DisplayName"); x.SetDescription("TopshelfDemo.Description"); }); } public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }
该写法的实现原理:通过通用主机方法 IHost 实现管理主机生存期
写法如下:
public class Program{ private IHost _host; public Program() { _host = new HostBuilder() .Build(); } public async Task StartAsync() { _host.StartAsync(); } public async Task StopAsync() { using (_host) { await _host.StopAsync(TimeSpan.FromSeconds(5)); } }}
打包
安装 TopshelfDemo
找到相应的文件夹TopshelfDemo.exe install
启动 TopshelfDemo
TopshelfDemo.exe start
卸载 TopshelfDemo
TopshelfDemo.exe uninstall
.NET 通用主机通用配置
配置Configuration
Host.CreateDefaultBuilder(args) .ConfigureHostConfiguration(configHost => { configHost.SetBasePath(Directory.GetCurrentDirectory()); configHost.AddJsonFile("hostsettings.json", optional: true); configHost.AddEnvironmentVariables(prefix: "PREFIX_"); configHost.AddCommandLine(args); });
环境名称
Host.CreateDefaultBuilder(args) .UseEnvironment("Development") //...
logging引入
.ConfigureLogging((context, logger) => { logger.AddConsole(); //logger.AddLog4Net(); logger.SetMinimumLevel(LogLevel.Information); })
依赖注入
public class ToDoWork { public string TimeNow() { return DateTime.Now.ToString(); } }program.cs .ConfigureServices((hostContext, services) => { services.AddScoped<ToDoWork>(); services.AddHostedService<Worker>(); });
program.cs 最终如下
using System.IO;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;using Topshelf;namespace TopshelfDemo{ public class Program { public static void Main(string[] args) { HostFactory.Run(x => { x.Service<IHost>(s => { s.ConstructUsing(() => CreateHostBuilder(args).Build()); s.WhenStarted(service => { service.Start(); }); s.WhenStopped(service => { service.StopAsync(); }); }); x.StartAutomatically(); x.RunAsLocalSystem(); x.SetServiceName("TopshelfDemo.ServiceName"); x.SetDisplayName("TopshelfDemo.DisplayName"); x.SetDescription("TopshelfDemo.Description"); }); } public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .UseEnvironment(Environments.Development) //.UseEnvironment(Environments.Production) //.UseEnvironment(Environments.Staging) .ConfigureHostConfiguration(configHost => { configHost.SetBasePath(Directory.GetCurrentDirectory()); configHost.AddJsonFile("hostsettings.json", optional: true); configHost.AddEnvironmentVariables(prefix: "PREFIX_"); configHost.AddCommandLine(args); }).ConfigureLogging((context, logger) => { logger.AddConsole(); //logger.AddLog4Net(); logger.SetMinimumLevel(LogLevel.Information); }) .ConfigureServices((hostContext, services) => { services.AddScoped<ToDoWork>(); services.AddHostedService<Worker>(); }); }}使用Topshelf部署.net core windows服务
相关文章推荐
- ASP.NET Core使用TopShelf部署Windows服务
- 使用Topshelf部署Windows服务
- 使用Topshelf部署.net core windows服务
- 使用maven的tomcat插件实现webapp的自动部署
- FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS
- Kubernetes 上安装 EMQ X 系列文章之三 :使用 Helm 管理、部署 EMQ X 集群
- 使用 ceph-ansible 快速部署 ceph
- 转载 使用Feature的方式部署Site column时, Field的Guid上忽略大括号将导致部署失败
- 使用ceoh-deploy工具快速部署ceph--部署
- java使用ant部署邮件发送
- MySQL分片高可用集群之MySQL Cluster部署使用
- 阿里云Linux CentOS 7 Docker部署使用gogs搭建自己的git服务器
- TFS使用文档-部署篇
- 使用Silverlight Stream 轻松托管部署你silverlight应用程序
- Tomcat配置虚拟目录(使用XML部署项目)
- 工作中部署使用MP平台的一些问题
- 使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)
- FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块
- cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
- 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十一】部署前的准备 3