当前位置: 首页 > news >正文

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

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开发

在这里插入图片描述

2 创建 WorkerService项目

2.1 新建一个WorkerService项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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包管理器的程序包管理器控制台中使用命令安装
    在这里插入图片描述
    安装nuget包
Install-Package Microsoft.Extensions.Hosting.WindowsServices

安装记录如下:
在这里插入图片描述

  • 方法2:通过浏览查找添加
    在这里插入图片描述

4. 发布

使用Visual Studio发布:

4.1 配置发布成单文件

在这里插入图片描述
配置发布目标
在这里插入图片描述
配置发布路径
在这里插入图片描述
在这里插入图片描述
完成后,点显示所有设置配置文件设置中选择部署方式:独立
在这里插入图片描述
设置文件发布选项:单文件
在这里插入图片描述

4.2 发布

  • 点击发布按钮发布
    在这里插入图片描述
  • 使用命令行发布:
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<Worker>();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 

相关文章:

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

Visual Studio2022中使用.Net 8 在 Windows 下创建 Worker Service 1 什么是 .NET Core Worker Service1.1 确认Visual Studio中安装了 ASP.NET和Web开发2 创建 WorkerService项目2.1 新建一个WorkerService项目2.2 项目结构说明3 将应用转换成 Windows 服务3.1 安装Microsoft.…...

HTML5应用的安全防护策略与实践

随着HTML5及其相关技术&#xff08;如CSS3和JavaScript&#xff09;的普及&#xff0c;Web应用变得越来越强大和复杂&#xff0c;同时也成为黑客攻击的目标。本文将探讨HTML5应用面临的常见安全威胁&#xff0c;以及如何通过最佳实践和代码示例来增强应用的安全性。 HTML5安全…...

堆叠和集群

堆叠和集群 堆叠/集群&#xff1a;把多条/两台设备通过线缆进行连接&#xff0c;逻辑上组成一台设备&#xff0c;作为应该整体来管 理和转发流量 堆叠和集群的区别 1. 何时设备支持对贴&#xff0c;框式设备支持集群 2. 堆叠可以支持多台&#xff0c;框式只能支持两台 堆…...

【5G Sub-6GHz模块】专为IoT/eMBB应用而设计的RG520NNA、RG520FEB、RG530FNA、RG500LEU 5G模组

推出全新的5G系列模组&#xff1a; RG520NNADB-M28-SGASA RG520NNADA-M20-SGASA RG520FEBDE-M28-TA0AA RG530FNAEA-M28-SGASA RG530FNAEA-M28-TA0AA RG500LEUAA-M28-TA0AA ——明佳达 1、5G RG520N 系列——专为IoT/eMBB应用而设计的LGA封装模块 RG520N 系列是一款专为 IoT…...

云计算监控减少网络安全事件的五种方法

当企业没有对其IT基础设施采取足够的保护措施时&#xff0c;就会发生网络安全事件。网络罪犯利用其漏洞注入恶意软件或提取敏感信息。许多这样的漏洞存在于使用云计算平台进行操作的企业中。 云计算使企业在市场上更具生产力、效率和竞争力。这是因为他们的员工即使不在同一地点…...

java之 junit单元测试案例【经典版】

一 junit单元测试 1.1 单元测试作用 单元测试要满足AIR原则&#xff0c;即 A&#xff1a; automatic 自动化&#xff1b; I: Independent 独立性&#xff1b; R&#xff1a;Repeatable 可重复&#xff1b; 2.单元测试必须使用assert来验证 1.2 案例1 常规单元测试 1.…...

Golang面试题整理(持续更新...)

文章目录 Golang面试题总结一、基础知识1、defer相关2、rune 类型3、context包4、Go 竞态、内存逃逸分析5、Goroutine 和线程的区别6、Go 里面并发安全的数据类型7、Go 中常用的并发模型8、Go 中安全读写共享变量方式9、Go 面向对象是如何实现的10、make 和 new 的区别11、Go 关…...

uni-app:文字竖直排列,并且在父级view中水平竖直对齐

一、效果 二、代码 <template><view class"parent"><text class"child">这是竖直排列的文字</text></view> </template> <script>export default {data() {return {}},methods: {},}; </script> <sty…...

Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?

目录 问题 systemd Docker Service 和 Socket 警告的原因 解决方法 问题 使用如下命令停止 Docker # systemctl stop docker 执行后报的时候报了一个 warning&#xff0c;如下 Warning: Stopping docker.service, but it can still be activated by:docker.socket 这时…...

Git 用法

基本介绍 版本控制工具用处&#xff1a; 备份代码还原协同开发追溯 版本控制工具 1、集中式版本控制工具 版本库是集中存放在中央服务器的&#xff0c;team 里每个人 work 时从中央服务器下载代码&#xff0c;是必须联网才能工作&#xff0c;局域网或互联网。个人修改后然后…...

《昇思25天学习打卡营第20天|GAN图像生成》

生成对抗网络&#xff08;GAN&#xff09;是一种深度学习模型&#xff0c;用于生成逼真的图像。在手写数字识别的任务中&#xff0c;GAN 可以用来生成与真实手写数字相似的图像&#xff0c;以增强模型的训练数据集。GAN 主要由两个部分组成&#xff1a;生成器&#xff08;Gener…...

【字幕】字幕特效入门

前言 最近两周调研了一下字幕特效的底层程序逻辑&#xff0c;因为工作内容的原因&#xff0c;就分享几个自己找的链接具体细节就不分享了&#xff0c;CSDN也是我的个人笔记&#xff0c;只记录一些简单的内容用于后续自己方便查询&#xff0c;顺便帮助一下正在苦苦查阅资料入门…...

Ubuntu 24.04安装Jellyfin媒体服务器图解教程

使用 Jellyfin 等开源软件创建媒体服务器肯定能帮助您管理和跨各种设备传输媒体集合。当你有一个封闭社区时&#xff0c;这尤其有用。 什么是 Jellyfin 媒体服务器&#xff1f; Jellyfin 媒体服务器&#xff0c;顾名思义&#xff0c;是一款开源软件&#xff0c;允许用户使用本…...

css3 中的伪类和伪元素

什么是伪类&#xff0c;什么是伪元素 伪类是用来添加特殊状态的选择器,它们以冒号(:)开头。伪类可以添加到任何现有的选择器上,用来选择处于特定状态的元素。 伪元素是用来选择元素的特定部分的选择器,它们以双冒号(::)开头。伪元素可以创建出在文档树中不存在的元素。 css3 …...

人工智能导论-知识图谱

知识图谱 概述 本章首先介绍“知识与知识表示”的概念&#xff0c;然后介绍“谓词逻辑、产生式、框架、语义网络”等当前人工智能中应用广泛的知识表示方法。然后&#xff0c;简要介绍知识图谱&#xff0c;为后面介绍推理方法、专家系统等奠定基础。 概述 - 起源&#xff08…...

LabVIEW液压数据采集测试系统

液压系统是装载机的重要组成部分&#xff0c;通过液压传动和控制实现各项作业功能&#xff0c;如提升、倾斜、转向等。液压系统的性能直接影响装载机的作业效率和稳定性。为了保证装载机液压系统的正常运行和优化设计&#xff0c;需要对其进行数据采集和测试。本文介绍了一套基…...

工业三防平板助力工厂生产数据实时管理

在当今高度数字化和智能化的工业生产环境中&#xff0c;工业三防平板正逐渐成为工厂实现生产数据实时管理的得力助手。这种创新的技术设备不仅能够在恶劣的工业环境中稳定运行&#xff0c;还为工厂的生产流程优化、效率提升和质量控制带来了前所未有的机遇。 工业生产场景通常充…...

LabVIEW人工模拟肺控制系统开发

开发了一种创新的主被动一体式人工模拟肺模型&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现了步进电机驱动系统的精确控制和多种呼吸模式的模拟。该系统不仅能够在主动呼吸模式下精确模拟快速呼吸、平静呼吸和深度呼吸&#xff0c;还能在被动模式下通过PID控制实现…...

达梦 ./disql SYSDBA/SYSDBA报错[-70028]:创建SOCKET连接失败. 解决方法

原因 达梦命令./disql SYSDBA/SYSDBA默认访问端口5236&#xff0c;如果初始化实例的时候修改了端口&#xff0c;需要指定端口访问 解决 ./disql SYSDBA/SYSDBA192.168.10.123:5237...

Autosar RTE配置-Assembly和Delegation的使用-基于ETAS软件

文章目录 前言Assembly和Delegation的含义Delegation的使用Assembly的使用总结 前言 RTE中的Compostion内部的SWC之间的连接使用Assembly Connector进行连接。这样的连接一般都是一个SWC的Pport对应另一个SWC的Rport。而Autosar软件中往往不只一个Composition(一般可以以核的数…...

一键切换语境+保留术语一致性+上下文感知翻译,Perplexity翻译查询功能的3大颠覆性能力,现在不用就落后了

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity翻译查询功能的全景概览 Perplexity 的翻译查询功能并非传统意义上的“文本翻译器”&#xff0c;而是一种融合语义理解、上下文感知与多语言知识检索的智能问答增强机制。它允许用户以任意自然语言…...

ChatGPTAPIFree代码架构深度剖析:从Express到OpenAI API的完整链路

ChatGPTAPIFree代码架构深度剖析&#xff1a;从Express到OpenAI API的完整链路 ChatGPTAPIFree是一个开源的代理API项目&#xff0c;让用户能够免费访问OpenAI的ChatGPT API服务。本文将深入剖析其代码架构&#xff0c;从Express服务器搭建到OpenAI API请求处理的完整链路&…...

深入解析C/C++栈空间:Windows/Linux默认大小、设置方法与溢出防御实战

1. 栈空间&#xff1a;一个被忽视的“内存边界”写C/C代码&#xff0c;尤其是涉及到递归、大数组或者复杂函数调用时&#xff0c;你肯定遇到过“栈溢出”&#xff08;Stack Overflow&#xff09;这个老朋友。它不像内存泄漏那样悄无声息&#xff0c;而是直接给你一个程序崩溃&a…...

4大技术支柱:构建Pixelle-Video的模块化AI视频生成系统

4大技术支柱&#xff1a;构建Pixelle-Video的模块化AI视频生成系统 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 传统视频制作流程需要…...

FL Studio自带的Edison插件,才是隐藏的降噪神器!手把手教你清除录音底噪(含参数设置避坑指南)

FL Studio隐藏神器Edison&#xff1a;专业级降噪全流程实战指南 在家庭录音棚里&#xff0c;空调的嗡嗡声、电脑风扇的呼啸、电路底噪的嘶嘶声——这些不受欢迎的"伴奏"总是如影随形。当你在FL Studio中回放刚录制的人声或乐器时&#xff0c;这些背景噪音往往会毁掉整…...

SoM嵌入式开发实战:从选型到量产的全流程解析

1. 项目概述&#xff1a;为什么SoM正在重塑嵌入式开发 在嵌入式系统开发这个行当里干了十几年&#xff0c;我亲眼见证了开发模式从“一切从零开始”到“模块化集成”的巨大转变。早期做一个项目&#xff0c;从选型MCU、画原理图、设计PCB、焊接调试&#xff0c;再到底层驱动移植…...

不止于存储:用GD32F407的片内FLASH实现一个简易的“EEPROM”数据管理系统

超越传统存储&#xff1a;基于GD32F407片内FLASH的智能数据管理方案 在嵌入式系统开发中&#xff0c;非易失性数据存储一直是个既基础又关键的环节。传统方案往往直接外挂EEPROM芯片&#xff0c;但这种方式不仅增加硬件成本&#xff0c;还占用宝贵的IO资源。而GD32F407这类高性…...

别再只抄datasheet了!TPS5430降压电路PCB布局的5个实战避坑点(附15V转12V/负压案例)

TPS5430降压电路PCB布局的5个实战避坑指南&#xff1a;从理论到15V转12V/负压案例 在硬件设计领域&#xff0c;TPS5430作为一款经典的Buck型DC-DC转换芯片&#xff0c;其性能表现与PCB布局质量密切相关。许多工程师虽然能正确绘制原理图&#xff0c;却在PCB实现阶段因忽视关键…...

第11代酷睿工业主板PICO-TGU4:边缘AI与机器视觉的紧凑型解决方案

1. 项目概述&#xff1a;当紧凑型工业主板遇上第11代酷睿在工业自动化、边缘计算和智能零售这些领域里&#xff0c;我们常常面临一个经典的矛盾&#xff1a;一方面&#xff0c;应用场景对计算性能的要求越来越高&#xff0c;无论是机器视觉的实时图像处理&#xff0c;还是AI推理…...

Ormar 性能优化:10 个提升数据库查询效率的技巧

Ormar 性能优化&#xff1a;10 个提升数据库查询效率的技巧 【免费下载链接】ormar python async orm with fastapi in mind and pydantic validation 项目地址: https://gitcode.com/gh_mirrors/or/ormar Ormar 是一个专为 FastAPI 设计的 Python 异步 ORM&#xff0c;…...