.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.pswp.cn/news/282092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282092.shtml
英文地址,請注明出處:http://en.pswp.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直到屏幕上出現蘋果的標志和進度…