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

.NET 6.0 Worker Service如何通过代码设置Windows服务描述等属性?

.NET 6 Worker Service 代码设置Windows服务信息

当然可以通过代码设置Windows服务的名称、显示名称和描述,具体方法如下:

1. 设置服务名称

直接在.UseWindowsService()的配置选项里指定即可,这是最直接的方式:

var builder = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    })
    .UseWindowsService(options =>
    {
        options.ServiceName = "MyCustomWorkerService"; // 自定义服务名称
    });

var host = builder.Build();
host.Run();

2. 设置显示名称和服务描述

这两个信息存储在Windows注册表中,需要通过修改注册表或ServiceController类来设置,注意必须以管理员权限运行程序才能操作:

方法:写个辅助工具类实现

using Microsoft.Win32;
using System.ServiceProcess;

public static class ServiceConfigHelper
{
    public static void UpdateServiceMetadata(string serviceName, string displayName, string description)
    {
        // 操作注册表更新显示名称和描述
        using var serviceKey = Registry.LocalMachine.OpenSubKey(
            $"SYSTEM\\CurrentControlSet\\Services\\{serviceName}", 
            writable: true);
        
        if (serviceKey == null) return;
        
        serviceKey.SetValue("DisplayName", displayName);
        serviceKey.SetValue("Description", description);

        // 可选:重启服务让设置立即生效
        using var serviceController = new ServiceController(serviceName);
        if (serviceController.Status == ServiceControllerStatus.Running)
        {
            serviceController.Stop();
            serviceController.WaitForStatus(ServiceControllerStatus.Stopped);
            serviceController.Start();
            serviceController.WaitForStatus(ServiceControllerStatus.Running);
        }
    }
}

然后在Worker服务的启动逻辑里调用(建议只执行一次,比如判断注册表是否已有值再调用):

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    // 仅第一次运行时设置(可根据实际情况调整判断逻辑)
    using var checkKey = Registry.LocalMachine.OpenSubKey($"SYSTEM\\CurrentControlSet\\Services\\MyCustomWorkerService");
    if (checkKey != null && checkKey.GetValue("Description") == null)
    {
        ServiceConfigHelper.UpdateServiceMetadata(
            "MyCustomWorkerService",
            "我的后台任务服务",
            "基于.NET 6 Worker Service开发的Windows服务,负责定时执行后台任务");
    }

    // 你的业务逻辑代码
    while (!stoppingToken.IsCancellationRequested)
    {
        _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
        await Task.Delay(1000, stoppingToken);
    }
}

注意事项

  • 操作注册表和服务必须拥有管理员权限,否则会抛出权限异常
  • 显示名称和描述只需设置一次,没必要每次服务启动都执行修改操作,可以加判断逻辑避免重复操作
  • 也可以通过sc命令在安装服务时直接设置(比如sc create 服务名 binPath= "exe路径" DisplayName= "显示名称" Description= "描述"),但如果要完全通过代码实现,上面的方法就适用

内容的提问来源于stack exchange,提问作者MCMod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:30:17