ServiceController-无法停止服务[C#]

问题描述 投票:1回答:1

我在这里阅读了很多类似的问题,但是没有一个能帮助我解决问题。我想使用ServiceController对象停止服务。但是它失败,并且出现异常:System.ComponentModel.Win32Exception(0x80004005)。我不明白为什么。.我使用“以管理员身份运行”来运行程序。

ServiceController ctrl = ServiceController.GetServices().Where(s => s.ServiceName == "service_name").SingleOrDefault();
if (ctrl == null) return;

if (ctrl.Status.Equals(ServiceControllerStatus.Running))
{
   try 
   {
      ctrl.Stop();
   }
   catch(Exception ex)
   {
      Log(ex.ToString(), 3);
   }
}

如果我从代码中调用net stop命令,则一切正常。为什么?

 Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("net stop service_name");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
c# service servicecontroller
1个回答
0
投票

我们进行了持续的聊天讨论ServiceController之后,发现以下内容:

  • [ServiceController能够Start服务,但没有Stop
  • [从系统日志中可以明显看出,ServiceController在尝试停止时崩溃了
  • [ServiceControllers StartStop与其他服务,例如PrintSpooler都可以正常工作
  • 使用CMDProcess.Start,我们可以通过sc stop "servicename"停止服务>
  • 最后,问题出在服务本身及其构造方式上
© www.soinside.com 2019 - 2024. All rights reserved.