在很多應用中需要做windows服務來在後台默默的做一些操作,比如:
1、週期性Database Backup。
2、週期性發送郵件或簡訊。
簡單說就是讓系統在後台默默的定期做一些事情,可能是一直在做,也可能是每隔一段時間做一次。
利用VS2008我們能夠在幾分鐘之內建立一個windows服務,非常簡單。
下面說一下步驟
1、建立一個“Windows服務”類型的項目
2、重新命名預設的“Service1” 為你喜歡的名稱。
3、VS預設開啟的是“設計檢視”介面,在空白處右擊選擇“屬性”,將“ServiceName”也換成你喜歡的名字。
這個名字預設就是系統“服務”中的名稱。
4、從工具箱的組件表當中拖動一個System.Timer對象到這個設計檢視中。
注意: 要確保是System.Timer控制項,而不是System.Windows.Form.Timer控制項。
否則是無效的,服務啟動了也不會有任何效果。
預設情況下,工具箱“組件”中的Timer控制項還恰恰就是System.Windows.Form.Timer,所以一定要注意。
如果工具箱中沒有System.Timer控制項,那就在工具箱任何位置右擊-“選擇項”-找到System.Timer後添加。
5、設定Timer控制項的屬性“Interval”值為需要的時間,這裡的單位是毫秒,1秒=1000毫秒,自己看著辦。
6、然後雙擊這個Timer控制項,VS自動切換到代碼介面,在這裡寫需要的程式碼完成想做的事情。
7、下面切換到“設計檢視”,在空白處右擊-“添加安裝程式”,系統會自動添加ProjectInstaller組件,並自動會開啟該組件的設計檢視,在該視圖中可以看到兩個控制項:serviceInstaller1和serviceProcessInstaller1。
8、右擊“serviceInstaller1”-“屬性”,設定以下參數:
ServiceName:預設就是我們在第3步驟中設定的服務名稱,不要修改,預設應該就是對的。
StartType:服務的啟動類型,可以根據需要設定,真正部署時一般都選擇自動,防止機器重啟服務停止。
DispalyName:就是服務顯示的易記名稱,相當於暱稱,如果不設定則顯示時預設就是步驟3設定的名字。
Description:服務的詳細描述,也就是該服務的詳細備忘說明。
9、右擊“serviceProcessInstaller1”-“屬性”,設定以下參數:
Account:預設是User,但是一般不指定該服務的使用者,而是設定為本地系統服務即“localSystem”。
10、OK,到了這裡我們的開發工作就算完成了,下面就是如何來安裝和部署這個服務。
11、可以直接使用“C:\Windows\Microsoft.NET\Framework\v2.0.50727\”內建的InstallUtil.exe命令。
如:InstallUtil c:\AutoRemindService.exe (卸載就是InstallUtil c:\AutoRemindService.exe -u)
12、也可以打包成獨立的安裝程式,比較適合傻瓜化的安裝,也是最終應該提供的方式。
打包程式可以是建立的獨立新項目,也可以直接在當前解決方案中添加打包項目,這裡我們就選擇後者。
下面逐步說明。
1、選擇VS菜單“檔案”-“添加”-“建立項目”,在彈出的視窗中選擇“其它項目類型”-“安裝和部署”-“安裝項目”,至於該項目的“名稱”可以隨便寫,“位置”一般預設和主專案放在一起就可以了,不必單獨設定。
2、右擊剛剛添加的“安裝項目”名稱,選擇“添加”-“項目輸出”,在彈出的視窗中選擇需要部署的項目,部署的檔案一般選擇“主輸出”,至於“配置”預設即可。
3、還是右擊剛剛添加的“安裝項目”名稱,選擇“視圖”-“自訂動作”,在開啟的頁面中右擊“自訂動作”選擇“添加自訂動作”,在彈出的視窗中選擇“應用程式檔案夾”裡面的“主輸出來自XXXXXX”後“確定”。
4、還是右擊剛剛添加的“安裝項目”名稱,選擇“視圖”-“使用者介面”,也就是設定安裝過程中的一些參數。
這個步驟不做也無所謂,但是如果是正規的安裝程式,還是有必要設定顯示一下自己的公司名稱什麼的。
5、右擊要部署的項目“重建”,右擊安裝項目“重建”。
6、找到安裝項目所在目錄,將尾碼名為msi的安裝檔案拷貝出來即可。
最後需要注意的是:
如果你修改了這個服務,路徑沒有變化的話是不需要重新註冊服務的。
如果路徑發生了變化,要先卸載這個服務InstallUtil.exe /u參數,然後再重新安裝這個服務,不能直接安裝。還有就是windows服務是沒有介面的,不要企圖用控制的輸出方式來輸出一些訊息,你只能添加一個EventLog,通過WriteEntry()來寫日誌。
設定快顯視窗也會被攔截,如果設定了該服務“允許服務與案頭互動”也還是以提醒方式經允許後才顯示。
實際上這本來就是後台默默啟動並執行服務,為何還要互動呢?
如果僅是要服務給你什麼資訊,那麼可以讓服務自動在某地方寫檔案或發郵件給你。