之前的文章已经写过了创建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.现在就和正常的服务一样了,有开始,有停止,操作后,然后打开日志,可以看到服务的记录。