如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用
Posted
技术标签:
【中文标题】如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用【英文标题】:How to change the startup type of Windows service to Disabled programmatically in C# 【发布时间】:2020-08-28 17:36:51 【问题描述】:您好,我正在尝试更改现有 Windows 服务的启动类型。说“Spooler”(打印后台处理程序)。我正在使用ServiceController
var service = new ServiceController("Spooler");
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, 600);
虽然我能够启动/停止服务,但我无法弄清楚如何更改启动类型本身? (例如:禁用/自动/手动)
当我查看ServiceController
的定义时,我可以看到ServiceStartMode
正在被定义。有人可以帮助我如何设置此选项吗?我的需要是使用 ServiceControl 类或任何其他可行的方式以编程方式禁用 Windows 服务..
【问题讨论】:
这能回答你的问题吗? How to stop Windows service programmatically 您可能想查看Disable Windows service at application launch的答案 【参考方案1】:最简单的方法是使用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
表示成功。
注意:如果您在没有管理员权限的情况下运行进程/Visual Studio,ExitCode
将为 5(访问定义)。
【讨论】:
谢谢。事实上,我已经尝试过了。我在这里看到的问题是,在 process.Start() 之后,当我检查进程对象时,我看到了 InvalidOperationException。所以我不能依靠 Process 的“HasExited”属性来确定操作是否成功以上是关于如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用的主要内容,如果未能解决你的问题,请参考以下文章
如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?
在 C# 中以编程方式设置 Windows XP Embedded 区域设置