逐步解說:在元件設計工具中建立 Windows 服務應用程式
注意事項 |
---|
在 Visual Studio 的標準版中,不能使用 [Windows 服務] 範本和相關的功能。 |
本主題中的程序示範建立一個簡單的 Windows 服務應用程式,將訊息寫入至事件記錄檔中。 您要執行以建立和使用服務的基本步驟包括:
使用 [Windows 服務] 應用程式範本建立專案。 這個範本會為您建立繼承自 ServiceBase 的類別,並且撰寫大部分的基本服務程式碼,例如啟動服務的程式碼。
為服務應用程式加入必要的安裝程式。 根據預設,當您按一下 [加入安裝程式] 連結時,便會將內含兩個以上安裝程式的類別加入至您的應用程式中:一個用於安裝處理序 (Process),另一個用於專案內含的每一個相關服務。
建置您的專案。
建立安裝專案來安裝您的服務,接著進行安裝。
存取 Windows 2000 服務控制管理員,並啟動您的服務。
若要開始,您需要建立專案並設定服務正常運作所需的值。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 Visual Studio 設定。 |
建立服務
若要建立和設定您的服務
在 [檔案] 功能表上,按一下 [新增專案]。
[新增專案] 對話方塊隨即開啟。
在 Visual Basic 或 Visual C# 專案範本清單中,選取 [Windows 服務],接著將專案命名為 MyNewService。 按一下 [確定]。
注意事項 專案範本會自動加入繼承自 System.ServiceProcess.ServiceBase 且名稱為 Service1 的元件類別。
按一下設計工具,選取 Service1。 然後,在 [屬性] 視窗中,將 Service1 的 ServiceName 和 [(名稱)] 屬性設定為 MyNewService。
在服務中加入功能
在下一節中,您要將自訂事件記錄檔加入至 Windows 服務中。 事件記錄檔與 Windows 服務毫無關聯。 這裡的 EventLog 元件是用來當做可加入 Windows 服務之元件類型的範例。
若要將自訂事件記錄檔功能加入您的服務中
在 [方案總管] 中,以滑鼠右鍵按一下 [Service1.vb] 或 [Service1.cs],然後選取 [設計工具檢視]。
從 [工具箱] 的 [元件] 索引標籤中,將 EventLog 元件拖曳至設計工具中。
在 [方案總管] 中,以滑鼠右鍵按一下 [Service1.vb] 或 [Service1.cs],然後選取 [檢視程式碼]。
加入或編輯建構函式以定義自訂事件記錄檔。
' To access the constructor in Visual Basic, select New from the ' method name drop-down list. Public Sub New() MyBase.New() InitializeComponent() If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyNewLog") End If EventLog1.Source = "MySource" EventLog1.Log = "MyNewLog" End Sub
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyNewLog"); } eventLog1.Source = "MySource"; eventLog1.Log = "MyNewLog"; }
若要定義服務啟動時執行的動作
在 [程式碼編輯器] 中,找到當您建立專案時會自動覆寫的 OnStart 方法,然後撰寫程式碼以決定當服務開始執行時所要執行的動作:
' To access the OnStart in Visual Basic, select OnStart from the ' method name drop-down list. Protected Overrides Sub OnStart(ByVal args() As String) EventLog1.WriteEntry("In OnStart") End Sub
protected override void OnStart(string[] args) { eventLog1.WriteEntry("In OnStart"); }
注意事項 服務應用程式是設計為長時間執行之用。 因此,它通常會輪詢或監視系統中的動作。 監視工作是在 OnStart 方法中設定的。 但是,OnStart 實際上並不進行監視的工作。 服務的作業開始後,OnStart 方法就必須傳回作業系統。 它不能永遠迴圈或阻斷。 若要設定簡單的輪詢機制,可以使用 System.Timers.Timer 元件。 在 OnStart 方法中,您會設定元件的參數,然後將 Enabled 屬性設定為 true。 然後計時器就會定期引發程式碼中的事件,這時候您的服務就可執行本身的監視工作。
若要定義服務停止時執行的動作
在 [程式碼編輯器] 中,選取 [方法名稱] 下拉式清單中的 OnStop 程序,在您建立專案時會自動覆寫這個程序。 請撰寫程式碼來決定當服務停止時所要執行的動作:
Protected Overrides Sub OnStop() EventLog1.WriteEntry("In OnStop.") End Sub
protected override void OnStop() { eventLog1.WriteEntry("In onStop."); }
您也可以覆寫 OnPause、OnContinue 和 OnShutdown 方法,以定義額外的元件處理方式。
若要為服務定義其他動作
針對您要處理的方法,覆寫適當的方法並定義您希望發生的動作。
下列程式碼會顯示您覆寫 OnContinue 方法的情況:
Protected Overrides Sub OnContinue() EventLog1.WriteEntry("In OnContinue.") End Sub
protected override void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
安裝 Windows 服務時需要執行一些自訂動作,可以使用 Installer 類別來進行。 Visual Studio 可建立專供 Windows 服務使用的安裝程式,並將它們加入至您的專案。
若要為您的服務建立安裝程式
在 [方案總管] 中,以滑鼠右鍵按一下 [Service1.vb] 或 [Service1.cs],然後選取 [設計工具檢視]。
按一下設計工具的背景 (Background) 以選取服務本身,而不是服務的內容)。
設計工具取得焦點時,以滑鼠右鍵按一下,再按 [加入安裝程式]。
依預設會將包含兩個安裝程式的元件類別加入您的專案中。 元件命名為 ProjectInstaller,而其所包含的安裝程式分別為服務的安裝程式和服務相關處理序的安裝程式。
在 [ProjectInstaller] 的 [設計] 檢視中,按一下 [ServiceInstaller1] 或 [serviceInstaller1]。
在 [屬性] 視窗中,確定 ServiceName 屬性已設定為 MyNewService。
在設計工具中,按一下 [ServiceProcessInstaller1] (針對 Visual Basic 專案) 或 [serviceProcessInstaller1] (針對 Visual C# 專案)。 將 Account 屬性設定為 LocalSystem。 如此會使服務安裝並在本機服務帳戶上執行。
安全性注意事項 LocalSystem 帳戶具有概括性的使用權限,包括寫入事件記錄檔的能力。 因此,請謹慎使用這個帳戶,因為它會增加您遭受惡意軟體攻擊的風險。 至於其他工作,建議使用 LocalService 帳戶,可在本機電腦上做為沒有權限的使用者,並提供匿名認證給任何遠端伺服器。
若要建置您的服務專案
在 [方案總管] 中,以滑鼠右鍵按一下專案,然後按一下 [屬性]。 專案的 [屬性設計工具] 隨即出現。
在 [應用程式] 頁面的 [啟始物件] 清單中,按一下 [MyNewService]。
按 CTRL+SHIFT+B 以建置專案。
既然已建置專案,您就可部署它。 安裝專案會安裝編譯過的專案檔,並執行啟動 Windows 服務所需的安裝程式。 若要建立完整的安裝專案,您必須將專案輸出 MyNewService.exe 加入至安裝專案,然後加入自訂動作以安裝 MyNewService.exe。 如需安裝專案的詳細資訊,請參閱設定和部署專案。 如需自訂動作的詳細資訊,請參閱逐步解說:建立自訂動作。
若要為您的服務建立安裝專案
在 [方案總管] 中,以滑鼠右鍵按一下方案、指向 [加入],然後按一下 [新增專案]。
展開 [已安裝的範本] 底下的 [其他專案類型],然後展開 [安裝和部署]。
選取 [Visual Studio Installer]。
在 [範本] 窗格中,選取 [安裝專案]。 將專案命名為 MyServiceSetup。 按一下 [確定]。
接著就會將安裝專案加入方案。
接下來您會將 Windows 服務專案的輸出 MyNewService.exe,加入至安裝專案。
若要將 MyNewService.exe 加入至安裝專案
在 [方案總管] 中,以滑鼠右鍵按一下 [MyServiceSetup]、指向 [加入],然後按一下 [專案輸出]。
[加入專案輸出群組] 對話方塊隨即出現。
[專案] 方塊中會選取 [MyNewService]。
從清單中選取 [主要輸出],然後按一下 [確定]。
接著就會將 MyNewService 的主要輸出專案項目加入至安裝專案中。
現在要加入自訂動作來安裝 MyNewService.exe 檔。
若要將自訂動作加入安裝專案中
在 [方案總管] 中,在安裝專案上按一下滑鼠右鍵,指向 [檢視],然後按一下 [自訂動作]。
[自訂動作] 編輯器隨即出現。
在 [自訂動作] 編輯器中,以滑鼠右鍵按一下 [自訂動作] 節點,然後按一下 [加入自訂動作]。
[選取專案中項目] 對話方塊隨即出現。
按兩下清單中的 [應用程式資料夾] 以開啟資料夾,選取 [來自 MyNewService 的主要輸出 (作用中)],然後按一下 [確定]。
主要輸出會加入至自訂動作的所有四個節點,[安裝]、[認可]、[復原] 及 [解除安裝]。
在 [方案總管] 中的 [MyServiceSetup] 專案上按一下滑鼠右鍵,並按一下 [建置]。
若要安裝 Windows 服務
若要安裝 MyNewService.exe,請在 [方案總管] 的安裝專案上按一下滑鼠右鍵,然後選取 [安裝]。
執行安裝精靈所示的步驟。 建置並儲存方案。
若要啟動和停止您的服務
若要在 Windows 7、Windows Vista 和 Windows Server 中開啟服務控制管理員,請以滑鼠右鍵按一下 [開始] 功能表上的 [電腦],然後按一下 [管理]。 在 [電腦管理] 主控台的左窗格中,展開 [服務及應用程式] 節點。 按一下 [服務]。
現在您應該可以看到 MyNewService 列在這個視窗的 [服務] 區段中。
從清單中選取您的服務,以滑鼠右鍵按一下該服務,再按一下 [啟動]。
在服務上按一下滑鼠右鍵,再按一下 [停止]。
若要確認服務的事件記錄檔輸出
開啟 [伺服器總管] 並存取 [事件記錄檔] 節點。
注意事項 在 Visual Studio 的標準版中,不能使用 [Windows 服務] 範本和相關的功能。
找出 MyNewLog 的清單並展開。 這時您應看到服務已執行的動作項目。
若要解除服務的安裝
- 在 [開始] 功能表上,開啟 [按制台],並按一下 [新增或移除程式],然後找出您的服務並按一下 [解除安裝]。
後續步驟
您可以瀏覽 ServiceController 元件的用法,讓您可以將命令傳送至已安裝的服務。
您可以使用安裝程式,在安裝應用程式時建立事件記錄檔,而不是在應用程式執行時才建立事件記錄檔。 此外在應用程式解除安裝時,安裝程式會刪除事件記錄檔。