记录一个本地服务运行定时任务(控制台应用程序)
1.修改你的项目文件(.csproj),添加 NuGet 包:
<ItemGroup><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
</ItemGroup>
2.修改你的 Program.cs,使用 HostBuilder并启用 Windows 服务支持:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;var host = Host.CreateDefaultBuilder(args).UseWindowsService() // ← 关键:启用 Windows 服务模式.ConfigureServices(services =>{services.AddHostedService<YourBackgroundService>(); // 注册你的服务类}).Build();host.Run();
3.创建一个继承自 BackgroundService的类,写你的定时任务逻辑:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;public class YourBackgroundService : BackgroundService
{private readonly ILogger<YourBackgroundService> _logger;public YourBackgroundService(ILogger<YourBackgroundService> logger){_logger = logger;}protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){_logger.LogInformation("执行定时任务... {time}", DateTime.Now);// 在这里写你的业务逻辑,比如调用 API、处理数据等await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken); // 每 5 分钟执行一次}}
}
4.打包发布到文件夹
5.运行sc.exe(管理员权限)
sc create YourServiceName binPath= "C:\path\to\your\published\app.exe" start= auto
6.启动项目
sc start YourServiceName