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

Go创建的Windows服务在services.msc中不显示,如何解决?

解决Go创建Windows服务无法在services.msc显示的问题

核心原因

services.msc会严格校验服务注册表项的必填配置,你的服务在Start、ErrorControl、ObjectName等键值上的不规范配置,导致图形界面未加载该服务,尽管PowerShell和命令行能正常识别并操作它。

关键注册表键值修正方案

针对你提到的差异项,给出标准配置要求:

  • Start:必须设置为合法启动类型数值,常见有效值为2(自动启动)、3(手动启动)、4(禁用),不可使用非标准数值
  • ErrorControl:建议设为1(普通错误,系统会弹出提示),这是多数系统服务的默认值,设为0可能导致services.msc忽略该服务
  • ObjectName:默认使用LocalSystem(本地系统账户),若服务无需特殊权限,不要留空或使用非标准账户名
  • DependOnService:无依赖服务时不要添加该键;若有依赖,需填写已存在的合法服务名称(如RpcSs)

Go代码修改示例

假设你原安装代码如下:

package main

import (
    "log"
    "golang.org/x/sys/windows/svc/mgr"
)

func installService(name, displayName, exePath string) error {
    m, err := mgr.Connect()
    if err != nil {
        return err
    }
    defer m.Disconnect()

    s, err := m.OpenService(name)
    if err == nil {
        s.Close()
        return nil // 服务已存在
    }

    // 原存在配置缺失的创建代码
    s, err = m.CreateService(name, exePath, mgr.Config{
        DisplayName: displayName,
        // 缺失关键配置项
    })
    if err != nil {
        return err
    }
    defer s.Close()
    return nil
}

func main() {
    if err := installService("MyGoService", "My Go Service", "C:\\path\\to\\your\\service.exe"); err != nil {
        log.Fatal(err)
    }
}

修改后补充必填标准配置:

s, err = m.CreateService(name, exePath, mgr.Config{
    DisplayName:      displayName,
    StartType:        mgr.StartAutomatic, // 对应注册表Start值2
    ErrorControl:     mgr.ErrorNormal,    // 对应注册表ErrorControl值1
    ServiceStartName: "LocalSystem",       // 对应注册表ObjectName
    // 若有依赖服务,添加:Dependencies: []string{"RpcSs"},
})

验证步骤

  1. 卸载原有问题服务:执行sc delete MyGoService命令
  2. 运行修改后的安装代码重新创建服务
  3. 刷新services.msc(或重启服务管理器),即可看到你的服务正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:05:08