2009-06-16 77 views
27

什麼時候應該使用Windows服務,何時應該在通知區域運行「後臺應用程序」?Windows服務與Windows應用程序 - 最佳實踐

如果我沒有錯,我的設計決定是,在用戶登錄到計算機之前需要運行的任何應用程序應該是服務。對於其他所有使用背景應用程序。我的決定是對的嗎?此外,如果我需要「管理員權限」爲我的後臺應用程序,我會升級使用清單。作爲服務運行有沒有其他具體優勢?

回答

22

我的經驗一般規則如下

  • 如果需要始終運行,這是一個服務。
  • 如果需要在一個特定的用戶帳戶來運行,網絡服務,本地系統,通常它是一個服務(或COM +應用程序)
  • 如果用戶需要一定的控制權,這通常是一個通知區域的應用程序。
  • 如果需要通知的東西的用戶,這是一個通知區域的應用程序

樂趣來,當你有需要運行的東西作爲一個系統帳戶,但也與它進行交互。 IIS就是一個很好的例子,它是一種服務,但是管理是一個應用程序 - 它需要在啓動時運行,它需要訪問用戶無法正常訪問的特定事物(c:\ inetpub),但是用戶需要能夠啓動,停止和配置它。

+0

當你需要以系統賬戶的形式運行某些東西,並且與之交互時,這種樂趣就來了。這實際上是我的問題...我試圖從我的服務中轉儲日誌信息,並在通知用戶的Windows應用程序中解析它們...不確定我的設計是否正確... – Mugunth 2009-06-16 09:22:22

3

我相信你的決定幾乎是正確的,但是,我會增加一個條件。以例如mysqld服務爲例(在這種情況下您有選擇,但大多數人將其作爲服務運行)。它作爲服務運行,因爲您希望通過潛在的多個應用程序隨時訪問該服務。重要的是它能夠響應所有調用它的應用程序,而且它本身並不是什麼大事,除了等待服務其他應用程序。

只是我會考慮以及做出我的決定時。

5

我會設計一個應用程序作爲服務,如果應用程序有一個關鍵的目的,應該永遠(或很少)關閉。 Windows服務提供了良好的崩潰恢復選項和良好的通知(請參閱服務屬性中的恢復選項卡)。

使用服務的一個很好的理由是因爲它們可以在任何用戶下運行(所以如果您將它們部署到遠程的服務器上,則可以在啓動服務後安全地註銷,而不用擔心應用程序將關閉太)。

我還將設計服務與桌面應用程序結合使用,桌面應用程序可以與服務交互,並可用於在運行時監視或重新配置服務。通過這種方式,您可以享受託盤應用程序的所有優勢。

但是,您不應該濫用服務,而僅僅使用它們,正如我所說的,用於cirtical應用程序。是