2011-03-01 64 views
18

我創建了一個設置爲自動啓動的Windows服務。此服務在啓動時連接到數據庫服務。問題是數據庫服務似乎在我的服務之後開始。是否有編程方式來定義此依賴關係,以便在數據庫服務啓動後啓動我的服務。創建Windows服務啓動之間的依賴關係

我發現這篇文章http://www.boyce.us/windows/servertipcontent.asp?ID=7其中談到添加註冊表項來做到這一點。我想知道是否有C#的方式來做到這一點?

更新:

添加到上面的問題。這是另一種情況。這些服務正在使用installshied進行安裝,而不需要projectinsaller。看來installshield會查找派生自ServiceBase類的類並安裝每個服務。如何在這種情況下添加依賴項?

回答

26

您正在爲項目的ServiceInstaller組件尋找ServiceInstaller.ServicesDependedOn Property

從文章的註釋部分(我加粗你感興趣的部分):

服務可能需要其他服務 來運行,纔可以啓動。來自此屬性的 信息是寫入註冊表中的一個鍵的 。當 用戶(或系統的情況下自動啓動的 )試圖運行 服務,服務控制管理器 (SCM)驗證每個陣列中的 服務已是 開始。

如果陣列中的任何服務 運行以後,SCM嘗試啓動 他們。這包括 手冊StartType的服務。

如果此服務 所依賴的任何服務無法啓動,則此服務 將不會啓動。如果系統未啓動,則會拋出異常 ,因爲系統級沒有異常處理 來檢測此情況。 決定如何處理服務啓動 失敗並在您的 代碼中執行此操作。通常情況下,如果服務啓動失敗 ,用戶在啓動時會出現一個對話框 。

如果該服務沒有啓動,則將 條目寫入應用程序 事件日誌。

,這便是服務 取決於不需要在同一 可執行的服務。

+0

+1 - 我想說什麼;) – Oded 2011-03-01 19:31:53

+0

你可以請。回覆編輯的問題。謝謝。 – stackoverflowuser 2011-03-01 20:33:04

+0

@stack:我很遺憾地說,自從我使用InstallShield(並且當我這麼做的時候,它不適用於Windows服務)已經有一段時間了,所以我恐怕沒有太大的幫助。我確實嘗試Google,並提出了[this](http://community.installshield.com/showthread.php?t=162302&page=4),這可能會有所幫助! – 2011-03-01 20:53:55

2

除了周杰倫裏格斯的回答,這裏是和例子,你應該添加到的ServiceInstaller什麼使依賴於事件日誌

Me.ServiceInstaller1.ServiceName = "Service1"; 
Me.ServiceInstaller1.ServicesDependedOn = new string[] {"EventLog"}; 

關當然,你的服務,如果您有其他服務依賴,將「Eventlog」更改爲其他內容..