十步完成windows服務的安裝

來源:互聯網
上載者:User

轉載自:http://www.cnblogs.com/greatandforever/archive/2008/10/14/1310504.html

可能是太過於懶惰的原因,研究個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 服務的成果:

 

 

總結:遇到問題的時候一定要冷靜,由淺入深系統地瞭解當前事務,而不要急於求成,這樣的效率反而會比較低下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.