十步完成windows服务的安装
可能是太過于懶惰的原因,研究個(gè)windows 服務(wù)的安裝程序都花了大半天時(shí)間。在網(wǎng)上看了一些示例,大部分都言過其實(shí),把過程搞得太過復(fù)雜,老是需要去研究如何利用InstallUtil.exe及其參數(shù)。事實(shí)上,既然要安裝.net下制作的windows服務(wù),肯定首先得在目標(biāo)機(jī)器上安裝有.net框架。因此,InstallUtil.exe也一定已經(jīng)存在目標(biāo)機(jī)器上了,因而利用微軟的傻瓜式操作就能很好地解決windows服務(wù)安裝和卸載的問題。
過一段時(shí)間估計(jì)還要狠狠地利用windows服務(wù)來完成一些功能,為了加深印象,又回過頭弄了一個(gè)名叫HelloWorldService的windows服務(wù),用最簡單的demo來完成所有的操作。這個(gè)服務(wù)的功能,僅僅是在它啟動(dòng)的時(shí)候創(chuàng)建一個(gè)HelloWorld.txt文件,里邊寫上Hello World!這幾個(gè)簡單的字母而已。
1、選擇Visual C#->Windows->Windows 服務(wù),創(chuàng)建一個(gè)HelloWorldService項(xiàng)目。
2、通過ServiceName更改服務(wù)的名稱為”HelloWorldService“,這是最后在安裝服務(wù)成功后在服務(wù)管理面板出現(xiàn)的名稱。
3、將Service1.cs更名為HelloWorldService.cs,在其OnStart方法中寫入簡單的代碼,用來實(shí)現(xiàn)創(chuàng)建文件并寫入“Hello World!"這幾個(gè)經(jīng)典字母。
4、在HelloWorldService.cs的設(shè)計(jì)界面點(diǎn)右鍵,在彈出菜單中選擇”添加安裝程序“。
點(diǎn)擊后出來的設(shè)計(jì)界面上添加了兩個(gè)控件——ServiceProcessInstall和ServiceInstaller。
ServiceProcessInstall安裝一個(gè)可執(zhí)行文件,該文件包含擴(kuò)展 ServiceBase 的類。該類由安裝實(shí)用工具(如 InstallUtil.exe)在安裝服務(wù)應(yīng)用程序時(shí)調(diào)用。在這里主要是修改其Account屬性。ServiceAccount指定服務(wù)的安全上下文,安全上下文定義其登錄類型。
LocalService 充當(dāng)本地計(jì)算機(jī)上非特權(quán)用戶的帳戶,該帳戶將匿名憑據(jù)提供給所有遠(yuǎn)程服務(wù)器。
LocalSystem 服務(wù)控制管理員使用的帳戶,它具有本地計(jì)算機(jī)上的許多權(quán)限并作為網(wǎng)絡(luò)上的計(jì)算機(jī)。
NetworkService 提供廣泛的本地特權(quán)的帳戶,該帳戶將計(jì)算機(jī)的憑據(jù)提供給所有遠(yuǎn)程服務(wù)器。
User 由網(wǎng)絡(luò)上特定的用戶定義的帳戶。如果為 ServiceProcessInstaller.Account 成員指定 User,則會(huì)使系統(tǒng)在安裝服務(wù)時(shí)提示輸入有效的用戶名和密碼,除非您為 ServiceProcessInstaller 實(shí)例的 Username 和 Password 這兩個(gè)屬性設(shè)置值。
ServiceInstaller安裝一個(gè)類,該類擴(kuò)展 ServiceBase 來實(shí)現(xiàn)服務(wù)。在安裝服務(wù)應(yīng)用程序時(shí)由安裝實(shí)用工具調(diào)用該類。在這里主要修改其StartType屬性。此值指定了服務(wù)的啟動(dòng)模式。
Automatic 指示服務(wù)在系統(tǒng)啟動(dòng)時(shí)將由(或已由)操作系統(tǒng)啟動(dòng)。如果某個(gè)自動(dòng)啟動(dòng)的服務(wù)依賴于某個(gè)手動(dòng)啟動(dòng)的服務(wù),則手動(dòng)啟動(dòng)的服務(wù)也會(huì)在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)。
Disabled 指示禁用該服務(wù),以便它無法由用戶或應(yīng)用程序啟動(dòng)。
Manual 指示服務(wù)只由用戶(使用“服務(wù)控制管理器”)或應(yīng)用程序手動(dòng)啟動(dòng)。
5、上面這些都是安裝包最終要安裝/卸載的對象。下面就來看看如何用.net制作安裝包。
需要在解決方案里邊添加一個(gè)安裝項(xiàng)目,取其名稱為HelloWorldSetup。
6、添加工程后,在默認(rèn)的視圖界面右鍵點(diǎn)擊”應(yīng)用程序文件夾“,選擇”添加“->”項(xiàng)目輸出“。
在彈出的窗口中選擇“主輸出”,點(diǎn)擊“確定”。
7、上面的步驟定義了最后在應(yīng)用程序文件夾中包含的內(nèi)容。下面來定義其他方面的內(nèi)容。在項(xiàng)目上點(diǎn)右鍵,選擇 視圖->自定義操作。
8、出來如下的界面,然后在”自定義操作“上點(diǎn)右鍵,選擇”添加自定義操作“。
在彈出的窗口中雙擊”應(yīng)用程序文件夾“。
然后選擇”主輸出來自HelloWorldService(活動(dòng))“,點(diǎn)擊”確定“。
選擇之后會(huì)發(fā)現(xiàn)所有的操作下邊都添加了剛才選定的項(xiàng)。做到這一步,就能使安裝程序卸載時(shí)不僅把程序卸載下來,也能把服務(wù)卸載下來。
9、接下來在安裝項(xiàng)目上點(diǎn)右鍵,選擇”生成“,就能使安裝程序正常發(fā)布了,成功后會(huì)生成兩個(gè)文件。
把這兩個(gè)文件拷到目標(biāo)機(jī)器上,雙擊HelloWorldSetup.msi文件,就可以開始安裝服務(wù)的征途了。
安裝成功后,就可以從服務(wù)管理面板中欣喜地看到我們夢寐以求的服務(wù)程序了。
不過在我點(diǎn)啟動(dòng)的時(shí)候,還出現(xiàn)了一段小插曲——系統(tǒng)報(bào)錯(cuò)了。錯(cuò)誤如下圖:
不過不用急,這種錯(cuò)誤可以在系統(tǒng)的”事件查看器“中的”應(yīng)用程序“選項(xiàng)中查看具體的錯(cuò)誤信息。
呵呵,原來是由于服務(wù)對于文件系統(tǒng)的操作權(quán)限問題所引起的。跑回去一看,發(fā)現(xiàn)在第5步中對ServiceProcessInstaller的Account設(shè)置成了LocalService,于是乎改成了LocalSystem。然后重新發(fā)布安裝程序,再重新安裝服務(wù),再啟動(dòng),呵呵,一切正常!
10、最后,一起來欣賞這個(gè)windows 服務(wù)的成果:
總結(jié):遇到問題的時(shí)候一定要冷靜,由淺入深系統(tǒng)地了解當(dāng)前事務(wù),而不要急于求成,這樣的效率反而會(huì)比較低下。
總結(jié)
以上是生活随笔為你收集整理的十步完成windows服务的安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各种问题汇总解决方法,持续更新中...
- 下一篇: 颜筋柳骨的意思(筋骨的含义是什么?)