標籤:des class http tar com width
最近一直在搞Windows服務,也有了不少經驗,感覺許可權方面確定比一般程式要受限很多,但方便性也很多。像後台運行不阻塞系統,不用使用者登入之類。哈哈,扯遠了,今天講一下那個怎麼給Windows服務做個安裝包。為什麼做安裝包?當然是方便了,不用每次調用InstallUtil,還有,就是看上去正規些。
不多說了,先來看看怎麼做吧。首先,當然是建立一個Windows服務的項目。這個大家應該都知道怎麼做(這都不明白的留言問我),然後要給服務“添加安裝程式”,1所示:(這一步和自己用InstallUtil註冊是完全一樣的)
(圖1)
添加後,會出來一個serviceProcessInstal1,還有serviceInstaller1,如果你一個項目裡有兩個服務的話,這裡就會有兩個serviceInstaller類,2:
(圖2)
圖3是serviceProcessInstal1的屬性頁面,其中Account就是指用於運行服務的帳戶,如果只是用於本地,可以選LocalSystem(本地系統),這是本地的最高許可權,並可以選擇和案頭互動功能。如果安全性考慮的話,請選擇適合自己的。
(圖3)
圖4是serviceInstaller2的屬性頁面,其中DisplayName就是顯示在Windows服務管理員中的服務名稱,Desciption是服務的說明。下面ServiceName是服務內部名稱。最關鍵的是下面的StartType,是指服務的啟動方式,是自動,手動和禁用三種。
(圖4)
下面,就是今天講的重點了,點擊“檔案”->“添加”->“建立項目”(5)
(圖5)
選擇“其他項目類型”->“安裝和部署”裡的“安裝項目”(6)
(圖6)
建好項目後,右鍵剛才建立的安裝項目,選擇“視圖”->“檔案系統”(7)
(圖7)
這時,開啟了檔案系統屬性。可以看到,螢幕左邊,出現了三項檔案系統的內容,因為我們是Windows服務程式,不需要在開始菜單和案頭上放置表徵圖,所以我們直接右鍵“應用程式檔案夾”->“添加”->“項目輸出”(8)
(圖8)
在出來的對話方塊中,選擇“主輸出”和“Release XXX”,這個由你的項目屬性決定,一般選擇Release Any CPU。(9)
(圖9)
系統會自動把項目輸出檔案,也就是Windows服務程式的EXE檔案和所有引用的類庫檔案都列在中間的框中。這時,為了方便安裝,我們把InstallUtil.exe和兩個我自己寫的批次檔一起添加進去。添加方法類似上面,只是把“項目輸出”改成“檔案”。
結果10所示:
(圖10)
接下來,就該配置一下安裝過程,讓安裝程式自動給我們安裝和卸載Windows服務。
還是右鍵安裝項目,選“視圖”->“自訂動作”,11:
(圖11)
左邊的視窗換到了自訂動作的視圖了,右鍵“安裝”->“添加自訂動作”(圖12),出現的對話方塊中,選中“應用程式檔案夾”,再選中其中的InstallUtil.exe檔案(圖13),添加好後,會在安裝操作下面多出一個InstallUtil.exe的分支。點一下它,在右邊的屬性頁面裡,設定Arguments=“ 你的Windows服務檔案名稱”,14(注意檔案名稱前要留一個空格)
(圖12)
(圖13)
(圖14)
同樣,在提交和卸載處,也添加InstallUtil.exe,不過屬性頁面中設定Arguments=“ -u 你的Windows服務檔案名稱”,這樣,安裝程式就能實現自動安裝註冊和卸載Windows服務了。其實簡單的做法只要在安裝,提交,復原,卸載 都添加項目的主輸出的話也是可以達到自動註冊/卸載服務 功能的,而且不依賴於InstallUtil.exe(15)
(圖15)
接下來就該讓Windows服務和安裝項目同時被編譯了。右鍵點擊解決方案,選擇“屬性”(16),在出來的對話方塊中,勾上安裝項目後面的產生。(17)
(圖16)
(圖17)
最後,右鍵解決方案,選擇“產生解決方案”,這時vs會將兩個項目都會編譯出來。不過要注意一點:項目的啟動順序一定要Windows服務項目在前,安裝項目在後。