从C#代码停止Windows服务;不起作用

本文关键字:服务 不起作用 Windows 代码 | 更新日期: 2023-09-27 18:13:44

我的代码必须停止服务。我正在使用以下代码:

ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.UseShellExecute = true;
processInfo.FileName = Environment.ExpandEnvironmentVariables("%SystemRoot%") + @"'System32'cmd.exe";
processInfo.Arguments = "sc stop SERVICENAME";
processInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
processInfo.Verb = "runas"; //The process should start with elevated permissions
Process process = new Process() { EnableRaisingEvents = true, StartInfo = processInfo };
process.Start();
process.WaitForExit();

然后,我使用以下命令从CMD窗口(手动,而不是在我的程序中(检查服务状态:sc SERVICENAME query。但状态仍然是RUNNING

当我停止它以管理员身份打开cmd并执行相同的命令(sc stop SERVICENAME(时,它就可以工作了。

你有没有想过为什么我的代码不起作用?

从C#代码停止Windows服务;不起作用

对于C#和.NET,最好使用以下ServiceController类:

ServiceController controller = new ServiceController("SERVICENAME");
controller.Stop();

sc stop SERVICENAME为参数执行cmd.exe不会有任何作用。它只会启动命令提示符。

要解决问题,只需直接执行sc.exe,将stop SERVICENAME作为参数传递。

// ...
processInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "sc.exe");
processInfo.Arguments = "stop SERVICENAME";
// ...