最近專案上遇到需要建立windows service處理的程式,
說也奇怪,不知道為啥透過網路要找出相關的說明需要東湊西湊才能找出自己想要的,
於是乎只好自己再寫一次,當作複習吧。
需求很簡單
1.建立一個每經過N秒就會啟動的服務
首先當然是先建立一個windows服務的專案囉,這邊我命名為WindowsServiceSample
建立完成後,當然就是馬上選擇「請按這裡切換到程式碼檢視」
因為需要每N秒處理一次,所以就需要加入計時器,只是這邊使用的計時器不是windows form專用的計時器,而是命名空間在「System.Timer」底下的計時器
這時候在OnStart內設定計時器的屬性,因為這個計時器是實體化的,所以需要加入Elspsed事件的處理。Elspsed事件內我就不多寫了,看各位需要這個計時器每N秒做什麼就寫入需要的code吧
完成後返回設計介面,並按下右鍵選擇「加入安裝程式」
此時會自動建立ProjectInstaller.cs檔案,內有兩個物件,分別為「serviceProcessInstaller1」「serviceInstaller1」
serviceProcessInstaller1的屬性中,有個Account,是用來指定啟動這個服務的帳號的,通常都會換成LocalSystem。(不然幹麻寫windows service 囧)
serviceInstaller1需要設定的就很多,
Description:服務的說明文字
DisplayName:呈現的名稱
ServiceName:服務的名稱(如果需要透過C#控制Service時,就需要指定這個名稱)
StartType:啟動狀態,通常是設定Automatic(因為需要開機後自動啟動嘛)
屬性都設定完畢後,接下來就是要註冊服務了,但這邊我是習慣透過安裝檔的方式去完成
(你總不能希望使用者手動在dos下命令去註冊吧,因為會被人客反駁)
選擇安裝專案,名稱就隨意囉,這邊範例是ChrisSetup
建立完成後,直接點選剛剛建立的專案,並且按下檢視=>自訂動作
這時候會出現自訂動作的設定畫面,對「自訂動作」點選右鍵「加入自訂動作」
這時候點選「應用程式資料夾」兩下
確定在應用程式資料夾後,點選右邊的「加入輸出」
選擇剛剛撰寫完成的windows service,並且按下「確定」
確定加入完成後,直接按下確定
此時自訂動作會出現下圖的樣子(四個都要有喔)
這個時候就建置安裝專案了
完成建置後,直接點選右邊按「安裝」
安裝完成後,到控制台的服務中尋找剛剛建立的服務,由於DisplayName我輸入的是CS,這邊的顯示名稱就是CS
點選兩下後就可以看到相關服務說明,可以用這張圖比對剛剛的設定狀況。
要注意的是,剛剛第一次安裝後,需要手動啟動服務或者是故意重新開機才能啟動服務(前提是StartType設定在Automatic上)
其他注意事項:windows serivce也可以使用App.config,但App.config變動後,需要重新啟動服務才有效果。
以上是不負責任教學,下台一鞠躬
留言列表