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

news2024/12/23 4:54:24

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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL字符串魔法:拼接、截取、替换与定位的艺术

在数据的世界里&#xff0c;MySQL作为一把强大的数据处理利剑&#xff0c;其字符串处理功能犹如魔术师手中的魔法棒&#xff0c;让数据变换自如。今天&#xff0c;我们就来一场关于MySQL字符串拼接、截取、替换以及查找位置的奇幻之旅&#xff0c;揭开这些操作的神秘面纱。 介绍…

RocketMQ控制台(rocketmq-dashboard/)

RocketMQ控制台的官网&#xff1a;RocketMQ控制台官网 页面往下拉 用户指导 https方式访问rocketmq-dashboard

【论文阅读】MCTformer+:弱监督语义分割的多类令牌转换器

【论文阅读】MCTformer:弱监督语义分割的多类令牌转换器 文章目录 【论文阅读】MCTformer:弱监督语义分割的多类令牌转换器一、介绍1.1 WSSS背景1.2 WSSS策略 二、联系工作2.1 弱监督语义分割2.2 transformers的可视化应用 三、MULTI-CLASS TOKEN TRANSFORMER3.1 Multi-class t…

书生浦语-大模型平台学习-环境搭建01

任务&#xff1a;完成SSH连接与端口映射并运行hello_world.py 详细步骤详见&#xff1a;https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Linux/readme.md 1、InternStudio介绍 InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持…

超算网络体系架构-资源层-平台层-服务层-应用层

目录 超算网络体系架构 我国超算基础设施 超算互联网相关标准研制方面 技术架构 资源层 基础资源 芯片多样 体系异构 高效存储 高速互连 资源池化 可隔离 可计量 互联网络 高带宽 低时延 高安全 平台层 算力接入 资源管理 算力调度 用户管理 交易管理 模…

FLYFLOW:ANT DESIGN VUE3 版本璀璨问世

FlyFlow 介绍 官网地址&#xff1a;www.flyflow.cc Element Plus 演示网址&#xff1a;pro.flyflow.cc Ant Design 演示网址&#xff1a;ant.flyflow.cc 经过作者几个星期夜以继日的辛勤耕耘与不懈探索&#xff0c;FlyFlow 工作流框架的 AntDesign 版本终于璀璨问世&#x…

【数据结构】深入理解Floyd最短路径算法:全面解析及Python实现

文章目录 一、Floyd-Warshall算法简介二、Floyd-Warshall算法的数学表述三、Floyd-Warshall算法的Python实现四、Floyd-Warshall算法的应用场景五、Floyd-Warshall算法的优缺点六、优化与改进七、总结 Floyd-Warshall算法是一种用于解决加权图中最短路径问题的经典算法。该算法…

每日一题,力扣leetcode Hot100之49. 字母异位词分组

该题用哈希表解答&#xff0c;具有统一特征的作为哈希表的键名&#xff0c;然后满足要求的作为值 解法一&#xff1a; 我们将每个字符串进行排序&#xff0c;如果排序后的结果相同&#xff0c;则可以认为是字母异位词&#xff0c;我们将排序后的结果作为哈希表的key&#xff…

2024嘶吼网络安全产业图谱(高清完整版)

在数字化和智能化浪潮的推动下&#xff0c;网络安全产业正处于一个快速变革的时期。从传统的防御手段和被动的威胁应对&#xff0c;到如今主动预防和智能检测技术的普及&#xff0c;网络安全领域的焦点和需求正不断演进。为了更好的理解当前网络安全产业现状和未来发展方向&…

ubuntu安装carla9.14及carla使用记录

ubuntu18和20都可以很好的运行。不过配置需要注意一些问题罢了&#xff0c;我个人比较习惯20&#xff0c;所以就主要从ubuntu20来说。 首先听说是最好自己使用一个新的python环境来用&#xff0c;那就先去下载anaconda&#xff0c;直接去清华源下载快一些&#xff1a; https://…

CentOS快速安装Docker(腾讯镜像源)

这里是引用"> 1、卸载旧版本的 Docker yum list installed | grep docker yum -y remove docker-ce-cli.x86_64 yum -y remove docker-ce.x86_64 yum -y remove containerd.io2、安装相关依赖 yum install -y yum-utils device-mapper-persistent-data lvm23、添加 …

js基础-小数计算,并转换成带两位的百分比

小数计算&#xff0c;并转换成带两位的百分比 1、需求说明2、执行过程2.1 计算 s12.2 计算 s2 1、需求说明 在工作中&#xff0c;有时需要将计算的小数转换成百分比小数&#xff0c;但是在js代码中&#xff0c;计算公式一点点的区别就会影响到最终的结果&#xff0c;如下面代码…

下载仓颉sdk安装时遇到“无法运行”问题

图1. 社区地址&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 在GitCode社区中下载Cangjie-0.53.4-windows_x64的sdk后&#xff0c;双击安装时遇到“此应用无法在你的电脑上运行的问题” 经过反复排查后&#xff0c;确定是sdk直接下载有问题&#xff1b;‘需要…

《电脑与电信》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《电脑与电信》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《电脑与电信》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;广东省科学技术厅 主办单位&#xff1a…

解决C#读取US7ASCII字符集oracle数据库的中文乱码

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;全栈领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录 前言一、解决方法二、安装System.Data.OleDb连接库三…

vue 实现下拉框的数据是树状结构

页面显示效果 vue实现代码 <el-form-item label"公司名称" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"请选择公司名称" clearable size"small"change"handl…

FastAPI 学习之路(五十)WebSockets(六)聊天室完善

我们这次只是对于之前的功能做下优化&#xff0c;顺便利用下之前的操作数据的接口&#xff0c;使用下数据库的练习。 在聊天里会有一个上线的概念。上线要通知大家&#xff0c;下线也要通知大家谁离开了&#xff0c;基于此功能我们完善下代码。 首先&#xff0c;我们的登录用…

昇思25天学习打卡营第二天|初学入门/初学教程/03-张量

心得 补充一些基本知识帮助理解张量这个比较理论的概念&#xff1a; 张量&#xff08;tensor&#xff09;理论是数学的一个分支学科&#xff0c;在力学中有重要应用。张量这一术语起源于力学&#xff0c;它最初是用来表示弹性介质中各点应力状态的&#xff0c;后来张量理论发…

《后端程序员 · Nacos 常见配置 · 第一弹》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

windows系统安装nacos

1、github下载nacos并解压。 https://github.com/alibaba/nacos 2、启动nacos: 进入bin目录&#xff0c;打开命令行,然后输入命令&#xff1a; startup.cmd -m standalone2.1 如何直接启动 修改bin目录下的startup.cmd启动文件&#xff0c;修改为&#xff1a;MODE“standalone…