Topshelf一个用于使用.NET构建Windows服务框架
1 Topshelf是什么?
Topshelf是用于托管使用.NET框架编写的Windows服务的框架。服务的创建得到简化,从而使开发人员可以创建一个简单的控制台应用程序,可以使用Topshelf将其作为服务安装。原因很简单:调试控制台应用程序比服务容易得多。一旦对应用程序进行了测试并准备投入生产,Topshelf便可以轻松地将应用程序即服务安装。
2 使用
2.1 创建应用程序
首先,创建一个新的控制台应用程序并从nuget获取Topshelf软件包
Topshelf
当您使用Topshelf时,我还建议装一下日志库,我们可以选择日志框架Serilog。
Topshelf.Serilog
Serilog.Sinks.Console
2.2 创建服务类
然后,创建服务类。我将其命名为MyService。在这里放置将在Windows服务的特定生命周期事件中调用的方法。至少,添加一些用于启动和停止服务的方法。
public class MyService
{
readonly ILogger log = Log.ForContext(MethodBase.GetCurrentMethod().DeclaringType);
public void Start()
{
log.Information("Starting MyService...");
}
public void Stop()
{
log.Information("Stopping MyService...");
}
}
2.3 在Topshelf中注册服务
接着,在Topshelf中注册我们的服务类。跳转到Program.cs并添加:
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.MinimumLevel.Debug()
.CreateLogger();
var rc = HostFactory.Run(x =>
{
x.UseSerilog(); // HostLogger改为使用Serilog。
x.SetDisplayName("我的服务"); // 我们设置要在Windows服务监视器中使用的winservice的显示名称。
x.SetDescription("我的服务详细描述"); // 我们设置了在Windows服务监视器中使用的winservice的描述。
x.SetServiceName("MyService"); // 我们设置要在Windows服务监视器中使用的winservice的服务名称。
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new 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 运行应用程序
接着,F5执行应用程序,如果一切顺利,你应该会看到类似以下内容的信息:

2.5 安装Windows服务
最后,安装Windows服务,以管理员身份打开命令行,浏览到exe目录并使用install参数调用它:
S045.Topshelf.ConsoleApp.exe install
现在,您可以在“服务”窗口中签出新注册的Windows服务。

Topshelf一个用于使用.NET构建Windows服务框架的更多相关文章
- 如何使用Topshelf与.NET泛型主机建立Windows服务
1 前置阅读 在阅读本文章之前,你可以先阅读: Topshelf一个用于使用.NET构建Windows服务框架 2 使用 2.1 创建应用程序 首先,创建一个新的控制台应用程序并从nuget获取Top ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
- WorkerServices构建Windows服务
.NET Core 3.1和WorkerServices构建Windows服务 介绍 ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Cor ...
- C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...
- [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...
- 如何把一个c语言程序做成windows服务开机自启动
原文:如何把一个c语言程序做成windows服务开机自启动 目前写的程序是一个用c语言实现socket侦听的,那么如何把这个程序做成开机自启动呢? 我们是通过vs6.0,编译后生成了.exe文件,然后 ...
- .NET创建一个即是可执行程序又是Windows服务的程序
不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...
- .NET Core 3.1和WorkerServices构建Windows服务
介绍 ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Core模板,他允许我们创建托管长期的运行的后台服务,这些服务具体实现IHostedS ...
- Windows服务框架与服务的编写
从NT内核开始,服务程序已经变为一种非常重要的系统进程,一般的驻守进程和普通的程序必须在桌面登录的情况下才能运行,而许多系统的基础程序必须在用户登录桌面之前就要运行起来,而利用服务,可以很方便的实现这 ...
随机推荐
- useful life skills website
useful life skills website 绳子打结技巧 https://www.animatedknots.com/complete-knot-list tools https://tab ...
- 【SVM】kaggle之澳大利亚天气预测
项目目标 由于大气运动极为复杂,影响天气的因素较多,而人们认识大气本身运动的能力极为有限,因此天气预报水平较低,预报员在预报实践中,每次预报的过程都极为复杂,需要综合分析,并预报各气象要素,比如温度. ...
- AI数学基础之:奇异值和奇异值分解
目录 简介 相似矩阵 对角矩阵 可对角化矩阵 特征值 特征分解 特征值的几何意义 奇异值 Singular value 奇异值分解SVD 简介 奇异值是矩阵中的一个非常重要的概念,一般是通过奇异值分解 ...
- # PyComCAD介绍及开发方法
项目地址:https://github.com/JohnYang1210/PycomCAD 1.综述 提到Autocad在工业界的二次开发,VB或者Lisp可能作为常用的传统的编程语言.但是,Py ...
- Go语言学习之路-11-方法与接口
目录 编程方式 go语言对象方法 自定义类型和方法 接收器: 方法作用的目标(类型和方法的绑定) go面向对象总结 方法的继承 go语言接口 为什么要用接口 接口的定义 接口的作用总结 接口的嵌套 空 ...
- 【python3】 解:import导包机制
模块和包 模块:我们定义的.py结尾的文件就是一个模块,模块中通常定义了类.方法.变量等一系列功能: 包:存放模块的文件夹,含有init.py文件,定义path属性. import语句的作用 impo ...
- vue 递归调用组件出错
报错信息: Avoid mutating an injected value directly since the changes will be overwritten whenever the p ...
- 如何在netcore下,愉快的使用IServiceProvider
之前一直做dotnet framework开发,依赖注入使用Autofac,Autofac的一般用法是服务启动时,将用到的接口.实现类名注入进去, 然后在服务其他地方如果使用该类时,直接在Contai ...
- js导出execl 兼容ie Chrome Firefox各种主流浏览器(js export execl)
第一种导出table布局的表格 1 <html> 2 3 <head> 4 <meta charset="utf-8"> 5 <scrip ...
- pytorch(16)损失函数(二)
5和6是在数据回归中用的较多的损失函数 5. nn.L1Loss 功能:计算inputs与target之差的绝对值 代码: nn.L1Loss(reduction='mean') 公式: \[l_n ...