.NET6创建windows服务图文教程
本文记录了使用Visual studio2022创建windows服务,并且安装windows服务设置为自动启动的步骤。
1、创建一个worker service
新建一个项目,选择辅助角色服务,如图所示:
我创建了一个名为WorkerService的项目,创建完成后的目录结构如图所示:
2、安装Microsoft.Extensions.Hosting.WindowsServices
当前项目可在linux下运行,但是还不能以服务的方式在windows上安装运行。所以需要安装Microsoft.Extensions.Hosting.WindowsServices包。可以通过Nuget安装。如果是使用.NET6版本的话可以选择6.x.x版本的包安装。
3、设置服务名称
在Program.cs文件中使用UseWindowsService设置服务名称。它会显示在Windows服务列表中。
using WorkerService;
IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options => {
// 设置服务名称,会在windows服务列表里显示
options.ServiceName = "LeavescnWorkerService";
})
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
})
.Build();
await host.RunAsync();
4、修改Worker.cs,编写需要执行的代码
在Worker.cs中,可以在ExecuteAsync方法里编写需要执行的代码。也可以重写StartAsync,StopAsync方法添加需要在服务启动和结束时需要执行的代码。
namespace WorkerService
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
public override Task StartAsync(CancellationToken cancellationToken) {
_logger.LogInformation("Worker starting at: {time}", DateTimeOffset.Now);
return base.StartAsync(cancellationToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Worker ending at: {time}", DateTimeOffset.Now);
return base.StopAsync(cancellationToken);
}
}
}
5、发布程序
编写代码完成后,可以发布程序。右键项目,选择发布,然后选择将程序发布到本地文件夹。默认发布到\workerservice\bin\release\net6.0\publish文件夹下。
6、注册Windows服务
通过sc create命令创建Windows服务。命令里也可以设置在服务列表里显示的服务名称。
sc.exe create LeavescnWorkerService binpath="D:\GitHub\WorkerService\WorkerService\bin\Release\net6.0\publish\WorkerService.exe"
CreateService 成功说明Windows服务创建成功了。
可以在服务列表里看到刚才创建的LeavescnWorkerService服务了。我们可以启动服务,也可以右键设置属性,把服务设置为自动启动。
可以通过sc delete <ServiceName>命令删除Windows服务。
更新于:1个月前相关文章
- .NET C# EntityFramework(EF)连接SQLite代码示例
- Sylvan.Data.Excel 性能优异的开源.NET Excel数据读取库
- ASP.NET Core 中常用的内置中间件
- .NET9 F#有什么新特性?
- .NET 开源 ORM FreeSql 使用教程
- .NET9 C# 13 有哪些新特性?
- .NET9 开始删除内置的 Swagger 支持 可使用Scalar.AspNetCore替代
- .NET 9 中System.Text.Json 的新增功能
- 什么是.NET渐进式Web应用(PWA)
- .NET开发中常见的异常报错原因和解决方法?
- .NET框架和CLR的工作原理?
- ASP.NET MVC与Web Forms的区别
- .NET C#中的IEnumerable和IEnumerator的区别
- 使用ADO.NET连接到南大通用GBase 8s数据库
- 鸿蒙OpenHarmony系统可以运行跨平台的.NET Core吗?
- ASP.NET Core使用partial标签报错
- .NET 9 即将推出的功能Task.WhenEach
- .NET 使用HttpClientFactory+Polly替代直接使用HttpClient
- .NET Framework被淘汰了吗?
- 强大的 .NET Mock 框架 单元测试模拟库Moq使用教程