【问题标题】:ServiceController - Can't stop the service [C#]ServiceController - 无法停止服务 [C#]
【发布时间】:2020-01-30 07:16:26
【问题描述】:

我在这里阅读了很多类似问题的帖子,但没有一个可以帮助我解决我的问题。 我想用 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();

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • @samuel。是的,我试过了,不幸的是,clyde 让我发起聊天的声望很低,我可以知道它是怎么可能的吗?
  • 嗨 Clyde,刚刚跟进,您能否确认以下答案是否对您的查询有所帮助,如果是,请点击绿色复选框接受,谢谢

标签: c# service servicecontroller


【解决方案1】:

在我们继续聊天讨论ServiceController 之后,我们发现了以下内容:

  • ServiceController 能够Start 服务,但不能Stop
  • 从系统日志中可以明显看出,ServiceController 在尝试停止时崩溃
  • ServiceControllers Start & Stop 可以与PrintSpooler 等其他服务一起正常工作
  • 使用CMDProcess.Start 我们可以通过sc stop "servicename" 停止服务
  • 最后,问题在于服务本身及其构建方式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多