[英]Stopping Windows Service from C# code doesn't work
我的代码必须停止服务。 我正在使用下面的代码:
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";
// ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.