背景: 假如现在有两个项目,分别是控制台程序和windows服务(创建项目的时候可以选择不同类型)
控制台:
csharp
static async Task Main()
{
while (true)
{
Console.WriteLine("运行中...");
await Task.Delay(5000);
}
}
windows服务:
csharp
using Microsoft.Extensions.Hosting;
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
})
.Build()
.Run();
public class Worker : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
Console.WriteLine("服务后台运行中...");
await Task.Delay(5000, stoppingToken);
}
}
}
控制台是需要自己手动启动的;windows服务在电脑开启就开始自启动运行(配置自动启动),遇到问题自动重启,因此windows服务开发完成之后需要安装和部署。
csharp
# 编译后生成 MyWindowsService.exe
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
# 安装服务
installutil "C:\Services\MyWindowsService.exe"
# 启动服务
net start MyWindowsService
# 停止服务
net stop MyWindowsService
# 卸载服务
installutil /u "C:\Services\MyWindowsService.exe"
完结撒花~