2011-04-04 56 views
2

我有一個服務,只是爲了啓動和停止我創建的另一個服務。 我遇到的問題是,當我試圖從名爲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; 
     } 
    } 

觀察者/簡單地檢查數據庫經常爲關價值和公佈回通過更新事件的類。提前致謝。

回答

1

我會建議檢查這兩個服務的名稱和依賴性。

您確定TUT & TUTController是您認爲的服務的名稱嗎?

更確切地說,是否有可能SCM有一個TUT被列爲TUTController的依賴關係(而不是其他方式),從而導致它關閉?

+0

我最初有TUT作爲依賴於TUTController,然後經過一番思考,我意識到這是錯誤的,並刪除它。它看起來像做了乾淨的解決方案和重建後沒有采取這種變化。這是做的竅門感謝這個主意! – Jesse 2011-04-05 13:58:39

0

您可以使用消息。

對於實例,有TUTService和SomeService。 當某些服務想要停止TUTService時,SomeService將消息StartServiceMessage發送到TuTService 在TUTService中實現MessageHandler以處理由SomeService發送的StartServiceMessage。

在了MessageHandler邏輯

,你可以有sc.stop()

您可以使用NServiceBus來實現郵件