[翻译] 使用 .NET Core 3.0 创建一个 Windows 服务
原文: .NET Core Workers as Windows Services
在 .NET Core 3.0 中,我们引入了一种名为 Worker Service 的新型应用程序模板。此模板旨在为您在 .NET Core 中编写长时间运行的服务的提供一个起点。在本演练中,我们将创建一个 worker 并将其作为 Windows 服务运行。
创建一个 Worker
注意:在我们的预览版中,worker 模板与 Web 模板位于同一级菜单中。这将在未来的版本中发生变化。我们打算将 Worker Service 模板直接放在“创建新项目”菜单中。
在 Visual Studio 中创建 Worker
在命令行中创建 Worker
运行 dotnet new worker
作为 Windows 服务运行
为了作为 Windows 服务运行,我们需要我们的 worker 监听来自 ServiceBase 的启动停止信号,该类型将 Windows 服务系统暴露给 .NET 应用程序。要做到这一点,我们希望:
添加 Microsoft.Extensions.Hosting.WindowsServices
NuGet 包
在 Program.cs 的 HostBuilder 中添加对 UseServiceBaseLifetime 的调用
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceBaseLifetime()
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
});
}
这个方法做了两件事。首先,它检查应用程序是否真正的作为 Windows 服务运行,如果不是,那么它什么都不做,这使得这个方法很安全,当本地运行或作为 Windows 服务运行时。您不需要向其添加保护语句,只需在未作为 Windows 服务安装时正常运行应用程序即可。
其次,它将配置 host 使用 ServiceBaseLifetime。 ServiceBaseLifetime 与 ServiceBase 一起使用,以帮助控制作为 Windows 服务运行时应用程序的生命周期。这会覆盖处理 CTRL + C 等信号的默认的 ConsoleLifetime 。
安装 Worker
一旦我们的 worker 使用 ServiceBaseLifetime,我们就需要安装它:
首先,让我们发布应用程序。如果我们立刻安装了 Windows 服务,这意味着只要服务运行,exe 就会被锁定。发布这一步是个很好的方法, 以确保我需要运行服务的所有文件都在一个位置, 并准备好安装。
dotnet publish -o c:\code\workerpub
然后我们就可以在命令行中使用 sc 命令来安装
sc create workertest binPath=c:\code\workerpub\WorkerTest.exe
例如:
安全说明:此命令将服务使用 local system 运行,这通常不是您想要做的事情。相反,您应该创建一个服务帐户并以该帐户运行 Windows 服务。我们不会在这里讨论这个问题,但是有一些文档在这里讨论它: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2
日志
日志记录系统有 Event Log 的提供程序,可以将日志消息直接发送到 Windows 事件日志。安装 Microsoft.Extensions.Logging.EventLog
并修改 Program.cs :
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(loggerFactory => loggerFactory.AddEventLog())
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
});
未来工作
在即将到来的预览版中,我们计划通过以下方式改善使用 Worker 的体验:
- 将 UseWindowsServiceBaseLifetime 重命名为 UseWindowsService
- 作为 Windows 服务运行时,自动的集成 Event Log 日志。
结论
我们希望您试用这个新模板,并希望您告诉我们它有什么问题,您可以在此处提出任何错误或建议:
https://github.com/aspnet/AspNetCore/issues/new/choose
译者注
原文作者在评论中提到,下一篇文章将讲解如何在 Linux/Unix 中创建服务
[翻译] 使用 .NET Core 3.0 创建一个 Windows 服务的更多相关文章
- 为MongoDB创建一个Windows服务
一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...
- tomcat创建一个windows服务
具体步骤如下: 1.把JDK解压到C:\Program Files\Java下,Tomcat解压到D:\tomcat下 2.配置环境变量 JAVA_HOME:C:\Program Files\Java ...
- 【原创】使用.NET Core 1.0创建一个Self-Contained控制台应用
开发机器:win7-x64 .NET Core版本:1.0.0-preview2-003121 Visual Studio Code:1.2.1 至于什么是Self-Contained应用类型以及与P ...
- 创建第一个windows服务
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开 ...
- .Net Core .Net Core V1.0 创建MVC项目
.Net Core V1.0 创建MVC项目 创建MVC项目有两种方式: 一.创建Web项目:(有太多没用的东西要去删太麻烦) 2.项目目录结构: 此种方法要注意的是,会创建好多个json文件,下面就 ...
- 【故障公告】数据库服务器 CPU 近 100% 引发的故障(源于 .NET Core 3.0 的一个 bug)
非常抱歉,这次故障给您带来麻烦了,请您谅解. 今天早上 10:54 左右,我们所使用的数据库服务(阿里云 RDS 实例 SQL Server 2016 标准版)CPU 突然飙升至 90% 以上,应用日 ...
- C#创建、安装一个Windows服务
关于WIndows服务的介绍,之前写过一篇: http://blog.csdn.net/yysyangyangyangshan/article/details/7295739.可能这里对如何写一个服务 ...
- 创建一个Windows服务程序与实现定时器效果
1.创建一个Windows服务程序 一. 新建Window服务项目 二. 添加安装程序 三. 配置服务属性 四. 编写定时器代码 publicpartialclassService1 ...
- C#创建一个Windows Service
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
随机推荐
- Markdown:常用语法
1.标题 说明:一共可以6级标题,几级几个# 一级标题 #一级标题 2.代码 用前后扩上 Hello World! 3.代码块 用前后扩上 Hello World! 4.加粗 加粗了 **加粗了** ...
- ASP.NET Core 应用发布与部署指南
一.前言 本篇主要包含哪些内容? 将项目发布到本地目录 将项目传输到服务器并配置启动&开机自动启动 将Nginx作为访问入口,配置反向代理 本篇环境信息 开发环境: 用途 工具&版本 ...
- Docker Data Center系列(三)- DTR安装指南
本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 成为UCP管理的 ...
- 使用Fraps获取3D程序的FPS
Fraps为免费软件(wiki),通过Hook OpenGL(SwapBuffer)或D3D(Present)来获取目标进程的FPS信息(32位进程注入fraps32.dll,64位注入fraps64 ...
- jvm程序执行慢诊断手册
生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长.本文分享,从业多年形成的排查守则. 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步.因为很多事故都是 ...
- Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
今天在用一键安装mysql的shell脚本安装mysql-5.1.73软件后发现mysql始终无法启动,多次执行后依旧报错,只能去查看error日志,发现了如下的2个错误: 错误一:Fatal err ...
- c/c++ 标准库 map set 大锅炖
标准库 map set 大锅炖 一,关联容器有哪些 按关键字有序保存元素 map 保存key和value set 只保存key mulutimap key可以重复出现 multiset key可以重复 ...
- lua时间戳和日期转换及踩坑
介绍lua的日期函数常用方法及我的一个踩坑. 时间戳转日期 os.date("%Y%m%d%H",unixtime) --os.date("%Y%m%d%H", ...
- This network connection does not exist
This network connection does not exist 在windows server 2008上面map了一个磁盘,共享的folder被我停止共享后,点击该磁盘的disconn ...
- php循环删除checkbox
一.首先要了解sql语句$SQL=delete from `user` where id in (1,2,4); 表单大概是:form action= method=post input name=I ...