从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#和.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";
// ...