停止来自其他服务的服务

时间:2011-04-04 22:28:06

标签: c# windows-services

我有一项服务,仅用于启动和停止我创建的另一项服务。 我遇到的问题是当我尝试从名为TUTController的Controller服务中停止名为TUT的其他服务时,它会自行停止而不是预期的服务。

  public TUTController()
    {
        InitializeComponent();
        observer = new StatusObserver();
        observer.Update += new EventHandler<CustomArgs>(observer_Update);
    }

    void observer_Update(object sender, CustomArgs e)
    {
        ServiceController sc = new ServiceController("TUT");
        sc.Refresh();

        switch (e.CurrentStatus)
        {
            case StatusObserver.Status.On:
                if (sc.Status == ServiceControllerStatus.Stopped)
                {
                    sc.Start();
                    sc.Refresh();
                }
                break;
            case StatusObserver.Status.Off:
                if (sc.Status == ServiceControllerStatus.Running)
                {
                    sc.Stop();
                    sc.Refresh();
                }
                break;
            default:
                break;
        }
    }

观察者是一个只是经常检查数据库的Off / On值并通过Update事件将其发回的类。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我建议检查两个服务的名称和依赖关系。

你确定TUT&amp; TUTController是您认为的服务名称吗?

更多的是,SCM是否有可能将TUT列为TUTController的依赖(而不是相反),从而导致它被关闭?

答案 1 :(得分:0)

您可以使用消息传递。

对于Instance,有TUTService和SomeService。 当某些服务想要停止TUTService时,SomeService会向TuTService发送消息StartServiceMessage 在TUTService中,您实现MessageHandler来处理SomeService发送的StartServiceMessage。

在MessageHandler逻辑中,您可以使用sc.stop()

您可以使用NServiceBus来实现消息传递