.NET6創(chuàng)建Windows服務(wù)的實(shí)現(xiàn)步驟
之前的文章已經(jīng)寫過了創(chuàng)建Windows服務(wù)。
不過之前使用的是.NET Framework創(chuàng)建的Windows服務(wù)。現(xiàn)在已經(jīng)2023年了,其中vs2022有新的方法去創(chuàng)建Windows服務(wù),本次使用.NET6創(chuàng)建Windows服務(wù)。
1.選擇如圖所示,其中vs2022這樣的,vs2019不一樣,但是都是worker service
2.創(chuàng)建完成是這樣的
3.安裝Microsoft.Extensions.Hosting.WindowsServices
這里注意版本,選擇的是net6,好像只能安裝6版本的。
nuget里面安裝
4.服務(wù)命名,Program.cs文件
namespace WorkerServiceDemo { public class Program { public static void Main(string[] args) { IHost host = Host.CreateDefaultBuilder(args) .UseWindowsService(options => { //給服務(wù)命名,在Windows服務(wù)中的會(huì)顯示名字 options.ServiceName = "NET6故里2130"; }) .ConfigureServices(services => { services.AddHostedService<Worker>(); }) .Build(); host.Run(); } } }
5.服務(wù)里面寫啟動(dòng),停止,以及執(zhí)行任務(wù),Worker.cs中寫
里面的業(yè)務(wù)就是,檢測(cè)啟動(dòng),停止,每次執(zhí)行任務(wù)都輸出
namespace WorkerServiceDemo { public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private readonly string filePath = "D:\\Service1.txt"; public Worker(ILogger<Worker> logger) { _logger = logger; } /// <summary> /// 執(zhí)行任務(wù) /// </summary> /// <param name="stoppingToken"></param> /// <returns></returns> protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); using (FileStream stream = new FileStream(filePath, FileMode.Append)) using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine($"{DateTimeOffset.Now},服務(wù)執(zhí)行!"); } await Task.Delay(1000, stoppingToken); } } /// <summary> /// 服務(wù)啟動(dòng) /// </summary> /// <param name="cancellationToken"></param> /// <returns></returns> public override Task StartAsync(CancellationToken cancellationToken) { using (FileStream stream = new FileStream(filePath, FileMode.Append)) using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine($"{DateTime.Now},服務(wù)啟動(dòng)!"); } return base.StartAsync(cancellationToken); } /// <summary> /// 服務(wù)停止 /// </summary> /// <param name="cancellationToken"></param> /// <returns></returns> public override Task StopAsync(CancellationToken cancellationToken) { using (FileStream stream = new FileStream(filePath, FileMode.Append)) using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine($"{DateTime.Now},服務(wù)停止!"); } return base.StopAsync(cancellationToken); } } }
6.效果
7.實(shí)際情況,我們肯定不是這么使用,但是這樣調(diào)試肯定是可以的,接下來,我們安裝此服務(wù),變成Windows服務(wù)的樣子,首選先進(jìn)行發(fā)布
8.執(zhí)行此命令
sc.exe create "故里2130" binpath="D:\code\WorkerService1\WorkerServiceDemo\bin\Release\net6.0\publish\WorkerServiceDemo.exe"
9.此時(shí)打開Windows服務(wù),看到已經(jīng)有了
10.現(xiàn)在就和正常的服務(wù)一樣了,有開始,有停止,操作后,然后打開日志,可以看到服務(wù)的記錄。
到此這篇關(guān)于.NET6創(chuàng)建Windows服務(wù)的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān).NET6創(chuàng)建Windows服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析Asp.net,C# 純數(shù)字加密解密字符串的應(yīng)用
本篇文章是對(duì)Asp.net,C# 純數(shù)字加密解密字符串的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05如何取得Repeater控件選擇的項(xiàng)目及注意事項(xiàng)
Repeater控件,每個(gè)item前有一個(gè)CheckBox,把選擇的item列顯出來,有兩個(gè)地方需要注意的,就是CheckBox與Label,這個(gè)Label是隨你需要獲取的內(nèi)容而變化喔。如你想獲取Nickname,那你需要把綁定的的內(nèi)容放在Label上2013-01-01asp.net 數(shù)據(jù)庫的連接和datatable類
asp.net下數(shù)據(jù)庫的連接與數(shù)據(jù)庫datatable類實(shí)現(xiàn)代碼。2009-05-05ASP.Net 圖片存入數(shù)據(jù)庫的實(shí)現(xiàn)代碼
在很多時(shí)候,我們有這樣的需求:把圖片存入到數(shù)據(jù)庫當(dāng)中。在一些應(yīng)用程序中,我們可能有一些敏感的資料,由于存儲(chǔ)在文件系統(tǒng)(file system)中的東西,將很容易被某些用戶盜取,所以這些數(shù)據(jù)不能存放在文件系統(tǒng)中。2008-11-11Repeater控件實(shí)現(xiàn)編輯、更新、刪除等操作示例代碼
如何在Repeater控件中實(shí)現(xiàn)像GridView控件一樣的編輯、更新、刪除功能?下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2014-01-01