2014-07-16 70 views
8

幾個windows服務可以共享一個進程。在C#中,他們將開始爲:從.Net角度來看windows服務的體系結構

ServiceBase.Run(new MyService1(), new MyService2()); 

run方法塊調用線程,其中main()執行。同時處理服務事件。那麼他們在哪裏執行?

他們是否使用異步過程調用的「主」過程中不僅被阻止,而是在可警告等待?如果是這樣,共享多個服務的過程在性能方面存在缺陷。處理程序是否在單獨的線程中運行?它們是否在包含Run()調用的流程之外執行?

+2

你問了7個問題。你必須把它削減到*一個*。 –

+2

@HansPassant問題2-5只是第一個問題的解釋。我刪除了6,7。 – SerG

+2

http://msdn.microsoft.com/en-us/library/windows/desktop/ms685967%28v=vs.85%29.aspx –

回答

0

在Windows中,多個服務可以使用SERVICE_WIN32_SHARE_PROCESS服務類型共享一個進程。 .NET必須使用此服務類型在Windows上的單個進程中註冊多個服務。

每個註冊的服務都有一個名稱和一個由SERVICE_TABLE_ENTRY結構表示的原生入口點地址。 .NET將爲每個傳遞給ServiceBase.Run方法的服務構造一個SERVICE_TABLE_ENTRY,並使用這些信息調用StartServiceCtrlDispatcher函數。

要接收有關服務狀態的通知,入口點(ServiceMain,由ServiceBase類實現)必須調用RegisterServiceCtrlHandlerEx來接收通知。這些通知使用APC發送。作爲一個側面說明,NotifyServiceStatusChange API也使用APC。

0

您可能要做的是Windows服務體系結構以及如何將服務應用程序集成到其中。

已經有關於在MSDN該主題一個很好的文章,which can be found here.

它不僅解釋了Windows如何與服務交互,如何服務數據庫工程(至少部分)。

本文還解釋了操作系統服務如何工作,並在IIS(Internet信息服務)中提供託管服務的一些提示。