【问题标题】:Unable to start and stop service using ServiceController无法使用 ServiceController 启动和停止服务
【发布时间】:2015-08-07 08:53:11
【问题描述】:

我有以下方法来启动和停止服务。由于我使用了类库(DLL)中的方法,因此我从另一个控制台应用程序调用此方法进行调试。

应用程序以管理权限启动。

public void ServiceStart()
{
    ServiceController service = new ServiceController();
    service.ServiceName = "ASP.NET State Service";
    service.Start();
}

public void ServiceStop()
{
    ServiceController service = new ServiceController();
    service.ServiceName = "ASP.NET State Service";
    service.Stop();
}

但是当我调用Start()Stop() 时,会引发异常并显示以下消息:

无法在计算机“。”上打开 ASP.NET State Service 服务。

谁能帮帮我?

【问题讨论】:

  • 您是否以管理员权限运行程序?
  • 查看 Windows 事件日志
  • 为我工作。它显然没有在您的计算机上看到该服务
  • 查看下面的答案 - 以及我的评论 - 如果它不起作用,你可以选择尝试

标签: c# service class-library servicecontroller


【解决方案1】:

您必须传递服务名称,而不是显示名称。 始终检查“服务”应用程序中的服务属性。

再试一次

service.ServiceName = "aspnet_state";

或者,您可以使用显示名称创建 ServiceController 实例:

ServiceController service = new ServiceController("ASP.NET State Service");

因为构造函数参数的documentation 说:

向系统标识服务的名称。这也可以 服务的显示名称。

还要注意调用

service.Start();

立即返回,无需等待服务启动。 你应该打电话给

service.WaitForStatus(ServiceControllerStatus.Running);

如果您想在应用程序继续之前确保服务正在运行。

【讨论】:

  • 我使用了ServiceController x = new ServiceController("ASP.NET State Service");,它在我的 PC 上运行良好 - 所以它不建议这样
  • @BugFinder 是的,因为文档构造函数说“这也可以是服务的显示名称。”但是,对于 ServiceName 属性,不是的情况。
  • 啊,我错过了。但值得注意的是,OP 可以选择这样做。
  • @BugFinder 我将其添加到我的答案中。我喜欢使用服务名称而不是显示名称,因为它们通常更短更简单。
  • 哦,不要不同意,但似乎不是每个人都知道如何获得短名称 - 虽然并不难。
【解决方案2】:

以管理员身份打开 Visual Studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2014-05-14
    • 2019-04-25
    相关资源
    最近更新 更多