You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过微软.NET Core组件将IHostedService控制台程序部署为Windows服务?

用.NET Core官方组件将控制台服务转为Windows服务

当然可以!微软在.NET Core 2.1及后续版本中提供了官方的Windows服务集成方案,完全不需要依赖第三方工具就能实现你的需求,下面是具体的实现步骤:

1. 安装官方Windows服务集成包

首先,在你的项目中安装NuGet包 Microsoft.Extensions.Hosting.WindowsServices,这是微软官方提供的组件,专门用于将基于HostBuilder的控制台程序转为Windows服务。

2. 修改HostBuilder配置

在你的Program.cs中,更新HostBuilder的构建逻辑,添加UseWindowsService()扩展方法——这个方法会自动检测程序的运行模式:如果是作为Windows服务启动,就切换到服务模式;如果直接运行EXE,依然保持控制台模式(方便开发调试)。

示例代码如下:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace MyConsoleService
{
    class Program
    {
        static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                // 启用Windows服务支持
                .UseWindowsService()
                .ConfigureServices((hostContext, services) =>
                {
                    // 注册你的后台服务(实现IHostedService接口的类)
                    services.AddHostedService<MyBackgroundService>();
                });
    }
}

这里的MyBackgroundService是你自己实现的后台服务类,需要继承BackgroundService(或者直接实现IHostedService),比如:

using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;

public class MyBackgroundService : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        // 这里写你的服务业务逻辑,比如定时任务、消息监听等
        while (!stoppingToken.IsCancellationRequested)
        {
            // 示例逻辑:每秒执行一次(服务运行时可将日志写入Windows事件日志)
            await Task.Delay(1000, stoppingToken);
        }
    }
}

3. 部署为Windows服务

完成代码修改后,先发布你的程序:

dotnet publish -c Release -o C:\Path\To\Publish\Folder

然后用Windows的sc命令安装服务:

sc create "MyCustomService" binPath="C:\Path\To\Publish\Folder\MyConsoleService.exe" displayName="我的自定义Windows服务" start=auto

注意:start=auto表示服务随系统自动启动,如果你想手动启动可以改成start=demand。

安装完成后,启动服务:

sc start MyCustomService

如果需要停止或删除服务,使用以下命令:

# 停止服务
sc stop MyCustomService

# 删除服务
sc delete MyCustomService

关键说明

  • 当程序作为Windows服务运行时,不会显示控制台窗口,默认日志会写入Windows事件日志(你也可以通过配置日志提供器自定义输出位置)。
  • 直接运行发布后的EXE文件时,程序依然会以控制台模式运行,方便你在开发阶段调试。
  • 这种方式完全基于微软官方组件,不需要依赖任何第三方库,稳定性和兼容性更有保障。

内容的提问来源于stack exchange,提问作者R. van Diesen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:32:41