如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用

How to change the startup type of Windows service to Disabled programmatically in C#

您好,我正在尝试更改现有 Windows 服务的启动类型。说 "Spooler"(后台打印程序)。我正在使用 ServiceController

   var service = new ServiceController("Spooler");
                    service.Start();
                    service.WaitForStatus(ServiceControllerStatus.Running, 600);

虽然我可以 start/stop 服务,但我不知道如何更改启动类型本身? (例如:Disabled/Automatic/Manual)

当我查看 ServiceController 的定义时,我可以看到正在定义 ServiceStartMode。有人可以帮助我如何设置此选项吗?我的需要是使用 ServiceControl class 或任何其他可行的方式以编程方式禁用 Windows 服务..

最简单的方法是使用 sc command tool:

将启动类型更改为禁用的示例:

sc config "MySql" start=disabled

请注意,您需要具有管理员权限才能成功运行此命令。

用 C# 代码包装:

var startInfo = new ProcessStartInfo
{               
    WindowStyle = ProcessWindowStyle.Hidden,
    FileName = "CMD.EXE",
    Arguments = string.Format("/C sc {0} {1} {2}", "config", "MySql", "start=disabled"),
};

using (var process = new Process { StartInfo = startInfo})
{
    if (!process.Start())
    {
        return;
    }

    process.WaitForExit();

    Console.WriteLine($"Exit code is {process.ExitCode}");
}

更新: 使用 process.Exit 代码检查处理操作是否成功。 0 ExitCode 成功。

注意:如果您 运行 在没有管理员权限的情况下使用 process/Visual Studio,则 ExitCode 将为 5(定义的访问权限)。