之前的文章已经写过了创建Windows服务。
C#创建Windows服务_c# 创建windows服务_故里2130的博客-CSDN博客
不过之前使用的是.NET Framework创建的Windows服务。现在已经2023年了,其中vs2022有新的方法去创建Windows服务,本次使用.NET6创建Windows服务。
1.选择如图所示,其中vs2022这样的,vs2019不一样,但是都是worker service
2.创建完成是这样的
3.安装Microsoft.Extensions.Hosting.WindowsServices
这里注意版本,选择的是net6,好像只能安装6版本的。
nuget里面安装
4.服务命名,Program.cs文件
namespace WorkerServiceDemo
{public class Program{public static void Main(string[] args){IHost host = Host.CreateDefaultBuilder(args).UseWindowsService(options =>{//给服务命名,在Windows服务中的会显示名字options.ServiceName = "NET6故里2130";}).ConfigureServices(services =>{services.AddHostedService<Worker>();}).Build();host.Run();}}
}
5.服务里面写启动,停止,以及执行任务,Worker.cs中写
里面的业务就是,检测启动,停止,每次执行任务都输出
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>/// 执行任务/// </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},服务执行!");}await Task.Delay(1000, stoppingToken);}}/// <summary>/// 服务启动/// </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},服务启动!");}return base.StartAsync(cancellationToken);}/// <summary>/// 服务停止/// </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},服务停止!");}return base.StopAsync(cancellationToken);}}
}
6.效果
7.实际情况,我们肯定不是这么使用,但是这样调试肯定是可以的,接下来,我们安装此服务,变成Windows服务的样子,首选先进行发布
8.执行此命令
sc.exe create "故里2130" binpath="D:\code\WorkerService1\WorkerServiceDemo\bin\Release\net6.0\publish\WorkerServiceDemo.exe"
9.此时打开Windows服务,看到已经有了
10.现在就和正常的服务一样了,有开始,有停止,操作后,然后打开日志,可以看到服务的记录。