我在一個C#項目中有三個Windows服務。使用安裝程序類(它包含三個服務安裝程序和一個進程安裝程序),我能夠安裝所有服務並將它們作爲三種不同的Windows服務啓動。c#:我如何作爲一項服務運行多個Windows服務?
現在我試圖在一個服務名稱下運行這些服務(我希望在服務控制管理器中看到一個服務名稱,而不是三個)。什麼是最好的方法來做到這一點?
在此先感謝!
我在一個C#項目中有三個Windows服務。使用安裝程序類(它包含三個服務安裝程序和一個進程安裝程序),我能夠安裝所有服務並將它們作爲三種不同的Windows服務啓動。c#:我如何作爲一項服務運行多個Windows服務?
現在我試圖在一個服務名稱下運行這些服務(我希望在服務控制管理器中看到一個服務名稱,而不是三個)。什麼是最好的方法來做到這一點?
在此先感謝!
您可能只有一個主要服務會將其他可執行文件作爲常規進程產生(請參閱Process.Start(..)
),該服務不會顯示爲Windows服務。該服務必須控制相關進程的生命週期(服務啓動後啓動/關閉前停止)。
創建一個新的Windows服務並啓動3個線程。
但是,這並不會給你任何形式的服務之間的隔離,從穩定的角度來看這可能是有問題的。雖然也許AppDomains可以幫助這裏。 –
您所要做的就是實現代碼重用的一些原則。
將每個相應的工作單元移入類/庫而不是服務。創建引用最終結果庫的單個服務。您的服務意圖可能是某種計時器,並可能暴露API端點。創建單一服務並從3個獨特的定時器中激活必要的類(如果需要的話 - 您可能會用一個定時器激活3種不同的類方法)。以類似的方式封裝事件或API端點。服務應該包含很少或根本不包含「業務」邏輯,它應該從引用的業務庫中獲取該工作。遵循這種做法,你的問題將主要回答它的自我。
當您提到Process.Start(..)時,您是否在討論System.Diagnostics命名空間中的Process類? – CuriousGeorge
@CuriouGeorge:是的,這就是我的意思。 – BrokenGlass