Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

07-19 1053阅读

Visual Studio2022中使用.Net 8 在 Windows 下创建 Worker Service

  • 1 什么是 .NET Core Worker Service
  • 1.1 确认Visual Studio中安装了 ASP.NET和Web开发
  • 2 创建 WorkerService项目
    • 2.1 新建一个WorkerService项目
    • 2.2 项目结构说明
  • 3 将应用转换成 Windows 服务
    • 3.1 安装Microsoft.Extensions.Hosting.WindowsServices
  • 4. 发布
    • 4.1 配置发布成单文件
    • 4.2 发布
  • 5 源代码分析
    • 5.1 BackgroundService 类
      • 5.1.1 抽象函数 ExecuteAsync:
      • 5.1.2 虚函数 StartAsync:
      • 5.1.3 虚函数 StopAsync:
    • 5.2 Worker.cs
    • 5.3 创建进程守护服务类 GuardProcessService
      • 5.3.1 GuardProcessService.cs 源代码
      • 5.3.2 在 Program.cs 中注入服务
      • 5.3.2 在代码中配置守护进程名称
    • 5.4 将日志写入EventLog
      • 5.4.1 了解 EventLog
      • 5.4.2 EventLogLogger
      • 5.4.3 EventLogLoggerProvider
  • 附:WTSGetActiveConsoleSessionId session 0

1 什么是 .NET Core Worker Service

Worker Service 是使用模板构建的 .NET 项目,该模板提供了一些有用的功能,可以将常规控制台应用程序变得更加强大。Worker Service 运行于宿主(Host)的概念之上,宿主维护应用程序的生命周期。宿主还提供了一些常见的特性,如依赖注入、日志记录和配置。
Worker Service 通常是长时间运行的服务,执行一些规律发生的工作负载。

1.1 确认Visual Studio中安装了 ASP.NET和Web开发

Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

2 创建 WorkerService项目

2.1 新建一个WorkerService项目

Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

2.2 项目结构说明

创建出来 Worker Service 项目包含以下文件:

文件 含义
Program.cs 控制台应用程序的入口点,启动时的“引导程序”。创建并运行宿主以管理应用程序生命周期并生成一个长期运行的服务。
appsettings.json 一个提供应用程序配置值的 JSON 文件。
Worker.cs 派生自 BackgroundService 基类,用于定义作为后台任务执行的长时间运行的工作负载。在这个文件中,你可以编写你的服务逻辑。

同时在依赖项的包中引入了Microsoft.Extensions.Hosting包。

3 将应用转换成 Windows 服务

为了将当前项目转换成服务的方式在windows上安装运行,也就是将 .NET Core 部署为 windows 服务,项目中需要引用 Microsoft.Extensions.Hosting.WindowsService

3.1 安装Microsoft.Extensions.Hosting.WindowsServices

  • 方法1:在nuget包管理器的程序包管理器控制台中使用命令安装
    Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
    安装nuget包
Install-Package Microsoft.Extensions.Hosting.WindowsServices

安装记录如下:
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

  • 方法2:通过浏览查找添加
    Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

4. 发布

使用Visual Studio发布:

4.1 配置发布成单文件

Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
配置发布目标
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
配置发布路径
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
完成后,点显示所有设置配置文件设置中选择部署方式:独立
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
设置文件发布选项:单文件
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

4.2 发布

  • 点击发布按钮发布
    Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
  • 使用命令行发布:
dotnet publish -r win-x64 -c Release
// 打包成单文件
dotnet publish -r win-x86 -c release /p:publishsinglefile=true /p:publishtrimmed=true

使用SC命令在windows上安装服务

sc create GuardService BinPath=d:\GuardService.exe

使用SC命令设置服务自动启动

scconfig GuardService start=auto

使用SC命令在windows上删除服务

sc delete GuardService

SC其他操作服务的常用命令:启动、停止

sc start GuardService
sc stop GuardService

5 源代码分析

Program.cs源代码

using GuardService;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService();
var host = builder.Build();
host.Run();

5.1 BackgroundService 类

BackgroundService 类实现了一个名为 IHostedService 的接口,为我们实现了 IHostedService。提供了三个可重写的方法,可以让我们绑定到应用程序的生命周期中。

5.1.1 抽象函数 ExecuteAsync:

作为应用程序主要入口点的方法。如果此方法退出,则应用程序将关闭。我们必须在 Worker 中实现它。默认情况下 Worker 只重写必要的抽象方法 ExecuteAsync。

protected abstract Task ExecuteAsync(CancellationToken stoppingToken);

5.1.2 虚函数 StartAsync:

在应用程序启动时调用。如果需要,可以重写此方法,它可用于在服务启动时一次性地设置资源;当然,也可以忽略它。

    public virtual Task StartAsync(CancellationToken cancellationToken)
    {
   
        _stoppingCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
        _executeTask = ExecuteAsync(_stoppingCts.Token);
        if (_executeTask.IsCompleted)
        {
   
            return _executeTask;
        }
        return Task.CompletedTask;
    }

5.1.3 虚函数 StopAsync:

在应用程序关闭时调用。如果需要,可以重写此方法,在关闭时释放资源和销毁对象;当然,也可以忽略它。

    public virtual async Task 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]