.NET 6 中将 ASP.NET Core 注册成 Windows Service

前言

使用 Visual Studio 中的 Worker Service项目模板:

c84f884336a8238a162e18057bb4f6a1.png

我们很容易创建出 Windows Service:

IHost host = Host.CreateDefaultBuilder(args).UseWindowsService().ConfigureServices(services =>{services.AddHostedService<Worker>();}).Build();await host.RunAsync();

需要引用 NuGet 包Microsoft.Extensions.Hosting.WindowsServices

但是,当我们想把 ASP.NET Core 应用注册成 Windows Service 时,却碰到了一些麻烦。

Demo

创建 ASP.NET Core 应用,然后把 Worker Service 中的代码复制过来:

var builder = WebApplication.CreateBuilder(args);builder.Host.UseWindowsService()
.ConfigureServices(services =>
{services.AddHostedService<Worker>();
});var app = builder.Build();app.MapGet("/", () => "Hello MyIO!");app.Run();

需要注意的是:与 Worker Service 不同,在 ASP.NET Core 应用中,需要通过builder.Host拿到IHostBuilder的实例。

使用sc create注册 Windows Service 成功。

但是在启动时,却提示 1053 错误:

1effc9d0493750ce1b15d297622291e9.png

通过事件查看器,我们发现导致错误的原因是当前工作目录是C:\WINDOWS\system32而不是我们的 ASP.NET Core 应用所在目录:

ab6c1ced0dfe71325d3044a837965a65.png

解决方案

1. 修改工作目录

虽然在 Windows Service 属性窗口中不能设置工作目录,但是我们可以在启动时修改当前工作目录:

Directory.SetCurrentDirectory(AppContext.BaseDirectory);var builder = WebApplication.CreateBuilder(args);

2. 设置 ContentRootPath

既然是ContentRootPath不正确导致的错误,那我们就按照错误提示使用 WebApplicationOptions 设置正确的ContentRootPath即可:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{ContentRootPath = AppContext.BaseDirectory,Args = args
});

结论

通过 2 种解决方案,我们都可以成功将 ASP.NET Core 应用注册成 Windows Service 并运行。

添加微信号【MyIO666】,邀你加入技术交流群

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

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

相关文章

19.12 添加自定义监控项目 配置邮件告警 测试告警

9月12日任务19.12 添加自定义监控项目19.13/19.14 配置邮件告警19.15 测试告警19.16 不发邮件的问题处理19.12 添加自定义监控项目需求&#xff1a;监控某台web的80端口连接数&#xff0c;并出图两步&#xff1a;1&#xff09;zabbix监控中心创建监控项目&#xff1b;2&#xf…

wab框架

http协议 一、http简介 1.HTTP是一个基于TCP/IP通信协议来传递数据&#xff08;HTML 文件, 图片文件, 查询结果等&#xff09;。 2.HTTP是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990年提出&#xff0…

c++ 二维矩阵 转vector_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...

当学习完矩阵的定义以后&#xff0c;我们来学习矩阵的基本运算&#xff0c;与基本性质矩阵的基本运算&#xff1a;矩阵的加法&#xff0c;每一个对应元素相加&#xff0c;对应结果的矩阵例子&#xff1a;矩阵A和矩阵B表示的是同学上学期和下学期的课程的成绩&#xff0c;两个矩…

android 4.4以上能够实现的沉浸式状态栏效果

仅仅有android4.4以及以上的版本号才支持状态栏沉浸效果 先把程序执行在4.4下面的手机上,看下效果: 在4.4以上的效果: 当然图片也是能够作为背景的.效果: 代码: if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {Window window getWindow();window.setFlags(Wind…

为abp vnext生成C#客户端给非abp第三方net程序使用

abp vnext提供了动态C#API客户端和静态C#API客户端来调用abp项目的接口&#xff0c;但是有局限性&#xff1b;要使用动态C#API客户端的项目必须也是ABP vnext的项目。静态C#API客户端也依赖abp的包&#xff0c;如下图为的静态客户端依赖于 Volo.Abp.DependencyInjection、Volo.…

项目中引入composer包

假如在云服务器上&#xff0c;项目根目录在 /data/shop&#xff0c;则 示例&#xff1a; cd /data/shop响应的结果可能会有两种: 1、第一种是直接require成功 示例&#xff1a; composer require haveyb/tiny-laravel #响应结果 ./composer.json has been created Loading …

圆的拟合

1.三点求圆心和半径 https://blog.csdn.net/liyuanbhu/article/details/52891868 2.最小二乘拟合圆转载于:https://www.cnblogs.com/yhlx125/p/9671641.html

printf()函数不能直接输出string类型

因为string不是c语言的内置数据&#xff0c;所以直接printf输出string类型的是办不到的。 要这样输出: printf("%s\n",a.c_str()); 举例: #include<bits/stdc.h> using namespace std; int main(){string a"人生";printf("%s\n",a.c_str()…

C#项目代码规范

目的 1.方便代码的交流和维护。 2.不影响编码的效率&#xff0c;不与大众习惯冲突。 3.使代码更美观、阅读更方便。 4.使代码的逻辑更清晰、更易于理解。 在C#中通常使用的两种编码方式如下 Camel(驼峰式)&#xff1a; 大小写形式&#xff0d;除了第一个单词&#xff0c;所有单…

.NET MAUI实战 FolderPicker

1.概要最近在迁移 GeneralUpdate.Tool的时候需要用到文件夹选择&#xff0c;在MAUI中可以使用FolderPicker进行选择。注意&#xff0c;和上篇文章的文件选择不一样。因为在.NET MAUI中目前还没有傻瓜式直接可用的FolderPicker供开发者使用所以需要自己动手做一些修改。完整示例…

h5外卖源码php_校园食堂外卖APP走红 更多APP定制开发上一品威客网

近日&#xff0c;西安一高校推出了一款校园食堂外卖APP走红网络。该APP涵盖学校食堂的所有饭菜&#xff0c;并可给该校的师生提供校园食堂饭菜外卖服务。饭菜价格与食堂统一&#xff0c;且仅供该校内的师生使用。 目前开发校园外卖订餐系统可谓是一个较热门的创业项目&#xff…

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)

程序设计的三种基本结构&#xff1a; 面向对象&#xff0c;面向过程&#xff0c;函数式编程1&#xff0c;什么是面向对象编程 面向对象编程是一种编程方式&#xff0c;此编程方式的落地需要使用 “类” 和 “对象” 来实现&#xff0c;所以&#xff0c;面向对象编程其实就是对 …

iPhone屏幕大小和适配建议(包括 XR XS XSM )

//4 ----:{{0, 0}, {320, 480}} //5、5s ----:{{0, 0}, {320, 568}} //6、6s、7、8 ----:{{0, 0}, {375, 667}} //6P、7P、8P ----:{{0, 0}, {414, 736}} 复制代码X 系列 //X ----:{{0, 0}, {375, 812}} //XR ----:{{0, 0}, {414, 896}} //XS ----:{{0, 0}, {375, 812}} //XSM …

go语言中的方法method

package main;import "fmt"//重新定义一个类型 //为该INT类型扩展方法 type INT int;type A struct {name string; }type B struct {name string; }func main() {a : A{};a.Print();//指针传递a.Print2();fmt.Println(a);//同上(*A).Print2(&a);b : B{};b.Print(…

微信自定义tabbar有小红点_自定义微信小程序tabBar组件上边框的颜色

背景&#xff1a;在微信小程序的实际开发过程中&#xff0c;有时候我们需要修改微信小程序提供的 tabBar 组件顶部边框的颜色&#xff0c;以满足项目需求解决方案&#xff1a;方式一&#xff1a;通过tabBar组件自带的 borderStyle 属性来控制边框的颜色&#xff0c;将边框的颜色…

又一批优质.NET6实战项目,面临永久下线...

多好的实战项目大家抓紧时间实操起来呀移动电商实战这次能上岸&#xff0c;最重要的是这个Vue3VantUI.NET6SqlSugar移动电商实战&#xff0c;全部都是最新最热的技术栈&#xff0c;写上简历后面试基本上都是问的这块儿内容。我先给大家看看项目的UI。项目UI全套实战源码这个电商…

laravel 配置微信公众号时{errcode:-106,errmsg:token check fail}

一、问题描述 做微信授权登录时&#xff0c;遇到的一个坑&#xff0c;提示配置失败&#xff0c;F12&#xff0c;响应为 errcode":-106,"errmsg":"token check fail 二、解决方案&#xff1a; 注&#xff1a;宗旨就是让微信能够访问你填写的网址&#xff…

电商企业怎样用好大数据

电商企业怎样用好大数据 大数据正在促生新的蓝海&#xff0c;催生新的经济增长点&#xff0c;正在成为政府和企业竞争的新焦点。2012年&#xff0c;瑞士达沃斯论坛发布《大数据&#xff0c;大影响》报告&#xff0c;称“数据已经成为一种新的经济资产类别&#xff0c;就像货币或…

ORACLE经常使用系统查询

&#xfeff;&#xfeff;1 查询系统全部对象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FROM DBA_OBJECTS WHERE OWNERUPPER(SCOTT) 2 查看系统全部表 SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES 3 查看全部用…

Safari 版本回退方法

回退条件 版本回退的前提是关闭电脑的SIP机制&#xff0c;命令行 csrutil status 检测状态。Mac os 10.14以下版本回退Safari后插件还是可以用的&#xff0c;升了新系统退了也没法用了。我的是旧系统 SIP关闭方法 1 重启MAC&#xff0c;按住cmdR直到屏幕上出现苹果的标志和进度…