C# VS2010 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 服務的成果:

 

 

參考:https://blog.csdn.net/wangzhen209/article/details/52931463


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM