Windows 服務應用程式簡介
更新:2007 年 11 月
Microsoft Windows 服務,也就是先前的 NT 服務,可讓您建立長期執行的應用程式,在應用程式本身的 Windows 工作階段 (Session) 中執行。這些服務可以在電腦啟動時自動啟動,也可以暫停或重新啟動,都不會顯示任何使用者介面。這些功能使得服務非常適合在伺服器中使用,或每當需要不干擾使用同一部電腦之其他使用者的長期執行功能時使用。您也可以在不同於登入使用者或預設電腦帳戶的特定使用者帳戶的安全性內容下執行服務。如需服務和 Windows 工作階段的詳細資訊,請參閱 MSDN Library 之 Platform SDK 文件中的 About Services 章節。
![]() |
---|
Visual Studio 的標準版中不能使用 [Windows 服務] 範本和相關的功能。 |
您可以輕鬆地建立應用程式,並將其安裝成為服務。例如,假設您希望監視效能計數器資料並反應臨界值。您可以撰寫接聽 (Listen) 效能計數器資料的 Windows 服務應用程式、部署此應用程式並開始收集和分析資料。
您可以將服務建立為 Microsoft Visual Studio 專案,在其中定義程式碼,以便控制可以傳送給服務的命令,以及收到這些命令時應該採取的動作。可以傳送給服務的命令包含啟動、暫停、繼續和停止服務,而且您也可以執行自訂命令。
當您建立並建置 (Build) 應用程式後,就可以執行命令列公用程式 InstallUtil.exe 並傳遞服務可執行檔的路徑,或是使用 Visual Studio 的部署功能,安裝此應用程式。之後您可以利用 [服務控制管理員] 來啟動、停止、暫停、繼續和設定您的服務。您也可以在 [伺服器總管] 的 [服務] 節點中,或利用 ServiceController 類別,完成許多相同的工作。
服務應用程式和其他 Visual Studio 應用程式的比較
服務應用程式的運作有幾方面不同於許多其他的專案類型,如下所示:
服務應用程式專案所建立的編譯可執行檔必須在專案能夠以有意義的方式運作前安裝在伺服器中。您不能按下 F5 或 F11 偵錯或執行服務應用程式,也不能立即執行服務或逐步執行程式碼。而是必須安裝並啟動服務,再附加偵錯工具到服務的處理序 (Process) 中。如需詳細資訊,請參閱 HOW TO:偵錯 Windows 服務應用程式。
和某些型別的專案不同的是,您必須為服務應用程式建立安裝元件。安裝元件負責在伺服器中安裝和註冊服務,並在 Windows 的 [服務控制管理員] 中建立服務項目。如需詳細資訊,請參閱 HOW TO:加入 Installer 至服務應用程式。
服務應用程式的 Main 方法必須為專案所包含的服務發出 Run 命令。Run 方法會將服務載入至適當伺服器的 [服務控制管理員] 中。如果您使用 [Windows 服務] 專案範本,則會自動為您撰寫這個方法。請注意,載入服務和啟動服務是兩回事。如需詳細資訊,請參閱下列「服務的存留期」。
Windows 服務應用程式在不同的視窗型工作站 (Window Station) 中執行,而不是在登入使用者的互動式工作站 (Interactive Station) 上執行。視窗工作站是安全物件,其中包含剪貼簿、一組全域元素和一組桌面物件。由於 Windows 服務的工作站不是互動式工作站,所以將無法看見由 Windows 服務應用程式內引發的對話方塊,而且可能造成程式停止回應。同樣地,錯誤訊息應該記錄在 Windows 事件記錄檔中,而不是產生在使用者介面中。
.NET Framework 支援的 Windows 服務類別並不支援與互動式工作站 (也就是登入使用者) 的互動。.NET Framework 也不包含表示工作站和桌面的類別。如果您的 Windows 服務必須與其他工作站互動,則需要存取 Unmanaged Windows API。如需詳細資訊,請參閱 Platform SDK 文件中的 Window 工作站和桌上型電腦。
Windows 服務與使用者或其他工作站的互動必須仔細經過設計以包含案例,例如沒有登入使用者,或是使用者具有未預期的桌面物件組。在某些情況中,可能撰寫在使用者控制下執行的 Windows 應用程式會更為恰當。
Windows 服務應用程式會在它們自己的安全性內容中執行,並在使用者登入安裝服務的 Windows 電腦前就已經啟動。您應該仔細地規劃服務要在那個使用者帳戶中執行;在系統帳戶下執行的服務所擁有的權限高於使用者帳戶。
服務的存留期
服務會在它的存留期中經過幾個內部的狀態。首先,會將服務安裝在將執行該服務的系統中。這個處理序會執行服務專案的安裝程式,並將服務載入該電腦的 [服務控制管理員] 中。[服務控制管理員] 是 Windows 提供給管理服務的集中式公用程式。
載入服務後,必須啟動該服務。啟動服務讓它可以開始運作。您可以藉由呼叫 Start 方法,從 [服務控制管理員]、[伺服器總管] 或程式碼啟動服務。Start 方法會將處理傳遞給應用程式的 OnStart 方法,並處理您在方法中定義的程式碼。
執行中的服務可以無限期地存在於這個狀態中,直到停止或暫停該服務,或直到電腦關機為止。服務可以存在於三個基本狀態的其中之一:Running、Paused 或 Stopped。服務也可以回報暫止命令的狀態:ContinuePending、PausePending、StartPending 或 StopPending。這些狀態指示已經發出命令,例如暫停執行中服務的命令,但是還沒有執行該命令。您可以查詢 Status 來判斷服務所處的狀態,或利用 WaitForStatus 在發生這些狀態任一項時執行動作。
您可以從 [服務控制管理員]、[伺服器總管] 或在程式碼中呼叫方法,以暫停、停止或繼續服務。每一個動作都可以呼叫服務中的相關程序 (OnStop、OnPause 或 OnContinue),您可以在其中定義服務改變狀態時要執行的其他處理。
服務型別
您可以使用 .NET Framework 在 Visual Studio 中建立兩種服務型別。屬於處理序中唯一的服務,會指定為 Win32OwnProcess 型別。和其他服務共用處理序的服務,則指定為 Win32ShareProcess 型別。您可以查詢 ServiceType 屬性,藉以擷取服務型別。
如果您查詢非 Visual Studio 所建立的現有服務,有時候您會看到其他的服務型別。如需這些服務的詳細資訊,請參閱 ServiceType。
服務和 ServiceController 元件
ServiceController 元件用以連接已安裝的服務並且管理其狀態;利用 ServiceController 元件,您可以啟動和停止服務、暫停和繼續其運作,並傳送自訂命令給服務。但是,當您建立服務應用程式時,並不需要使用 ServiceController 元件。事實上,在大多數情況下,ServiceController 元件應該存在於定義服務之 Windows 服務應用程式之外的另一個應用程式中。
如需 ServiceController 元件的詳細資訊,請參閱監視 Windows 服務。
部署和安裝服務
Visual Studio 隨附一些安裝元件,這些元件可以安裝與您的服務應用程式相關聯的資源。安裝元件會在安裝服務的系統中為每一個服務進行註冊,並讓 [服務控制管理員] 知道服務的存在。
當您將安裝程式加入應用程式之後,下一步就是建立安裝專案,安裝專案會安裝編譯好的專案檔案,並執行安裝服務所需的安裝程式。若要建立完整的安裝專案,您必須將服務專案的輸出加入至安裝專案,然後加入可安裝服務的自訂動作。如需安裝專案的詳細資訊,請參閱安裝專案。如需自訂動作的詳細資訊,請參閱逐步解說:建立自訂動作。
需求
服務必須在 [Windows 服務] 應用程式專案或另一個啟用 .NET Framework 的專案中建立,而這個專案建置時會建立 .exe 檔案並繼承自 ServiceBase 類別。
包含 Windows 服務的專案,必須有專案和其服務的安裝元件。在 [屬性] 視窗中可以輕鬆地完成這個工作。如需詳細資訊,請參閱 HOW TO:加入 Installer 至服務應用程式。
請參閱
工作
逐步解說:在元件設計工具中建立 Windows 服務應用程式