繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM