2009-08-01 104 views
5

我只創建了常規的Windows應用程序(主要是C#)。什麼區分Windows服務和普通的Windows應用程序?是什麼讓他們不同?服務可以做什麼,應用程序不能?從開發者的角度看,有什麼不同?你如何創建一個?僅僅是爲了創建一個普通的應用程序(可能是控制檯應用程序,因爲沒有GUI?)並以特殊方式運行或安裝它,還是需要執行更多操作?Windows服務和常規應用程序有什麼區別?

回答

9

有幾件事立即跳出來給我。

  • 它們運行在一個完全不同的控制檯與Vista
  • 開始作爲一個不同的控制檯上運行的結果是,服務無法與桌面交互。所以基本上沒有直接的UI支持。您通常必須編寫一個兄弟UI應用程序,該應用程序作爲普通程序運行,並使用一些機制(例如命名管道)與該服務進行通信。
  • 通常,只有一個服務實例可以在任何給定時間運行。
  • 流程是每個用戶,服務是每個工作站,因此經常爲多個用戶提供服務。
0

主要區別在於Windows服務是您想要作爲後臺服務運行的東西,並且不需要用戶界面。一個例子是一個服務,索引您的驅動器上的文件進行搜索。 。

的另一個好處是,你可以當

用戶登錄也有可以覆蓋在服務啓動時調用方法服務自動啓動/停止(即從控制面板|。管理工具|服務)。

在Visual Studio中有一個特殊的項目類型可以用來創建它。例如,請參見下面的網站:http://www.dotheweb.net/articles/dotnet/services.aspx

+0

我寧願說你可以讓服務在機器上沒有任何交互式會話的情況下運行。您可以在用戶以各種方式登錄時啓動許多或程序。使用服務並不是真正的好處。 – Joey 2009-08-01 22:51:11

6

This MSDN page導致更多關於創建它們的文檔,而不是您可以動搖的地方。 This page對他們來說可能是一個更好的介紹。

作爲應用程序運行的進程與作爲服務運行的進程之間的主要區別在於,服務完全可以在與用戶和會話的正常關聯之外運行。因此,服務可以在任何用戶登錄之前運行,並且可以在用戶註銷後繼續運行。服務因此用於實現操作系統的大量實際功能。

服務也不像綁定到一個進程的1:1映射。許多服務可以在一個進程中存在,通常通過使用svchost(使用進程資源管理器查看這些信息以指示常用工作方式)。這減少了啓動時的工作量,因爲相對輕量級的服務不需要多個進程。

在c#中實現一個服務非常簡單,這個page指出瞭如何非常容易地遵循術語。

請注意,實際上Windows中的服務只是在HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services下的註冊表中的腳手架,它定義了那些'圖像路徑'(在大多數情況下簡單的可執行文件和要使用的參數)考慮服務以及隨後由哪個用戶運行,他們依賴哪些其他服務以及他們是從啓動/啓動後啓動還是根據需要啓動。

2

如果您熟悉Unix,則Windows服務就像是一個Unix守護進程。它不與任何特定的用戶關聯,並且始終在後臺運行。

相關問題