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