1. 程式人生 > >C#建立Windows服務與安裝

C#建立Windows服務與安裝

當我們做專案的時候,經常會遇到一種情況就是:需要隔一段時間就執行某些操作,比如資料庫統計,刪除多餘的檔案防止專案佔用很多空間等等。

下面通過一個小demo來說明Windows服務與安裝。

1–> 建立專案

這裡寫圖片描述

2–> 右鍵點選Service1.cs,檢視程式碼, 用於編寫操作邏輯程式碼。邏輯程式碼包括兩個部分,OnStart和OnStop。我們主要修改的是OnStart中的內容,即:服務開啟之後執行的邏輯

這裡寫圖片描述

3 –> 由於我們需要每隔一段時間就執行一次,一般使用timer,便於隔一段事件執行一回,在程式碼中新增一個timer,並實現timer的Elapsed事件。主要程式碼:

private System.Timers.Timer myTimer;//timer
        /// <summary>
        /// 重寫服務OnStart方法
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            myTimer = new System.Timers.Timer();
            myTimer.Interval = 60000
; //設定計時器事件間隔執行時間 myTimer.Elapsed += (timer1_Elapsed); myTimer.Enabled = true; } /// <summary> /// 重寫服務OnStop方法 /// </summary> protected override void OnStop() { } /// <summary> /// timer /// </summary>
/// <param name="sender"></param> /// <param name="e"></param> private void timer1_Elapsed(object sender, ElapsedEventArgs e) { try { DoWork(); } catch (Exception ex) { } } //邏輯程式碼 void DoWork() { }

至此,邏輯部分程式碼基本就寫完了。

4 –> 建立安裝服務。雙擊解決方案中Service1,開啟檢視設計器。

這裡寫圖片描述

5 –> 在檢視內【右鍵】——-【新增安裝程式】。專案中添加了ProjectInstaller.cs檔案,該檔案中檢視自動會新增倆個元件
serviceProcessInstaller1
serviceInstaller1

這裡寫圖片描述

6 –> 選中serviceProcessInstaller1元件,檢視屬性,設定account為LocalSystem

這裡寫圖片描述

7 –> 選中serviceInstaller1元件,檢視屬性
設定ServiceName的值, 該值表示在系統服務中的名稱
設定StartType, 如果為Manual則手動啟動,預設停止,如果為Automatic為自動啟動
設定Description,新增服務描述

這裡寫圖片描述

ServiceName:該值表示在系統服務中的名稱 。即紅色框中的部分,這個值不能為空,否則在系統服務中找不到(以前做服務一不小心就這樣了).

這裡寫圖片描述

設定Description,新增服務描述:

這裡寫圖片描述

讓後就可以生成專案,準備安裝了。

8 – > 安裝服務。

a . 執行cmd,獲取命令提示符win7需要已管理員的身份啟動,否則無法安裝
這裡寫圖片描述

b . 由於demo的框架使用的是4.5的,所以輸入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回車
切換當前目錄,此處需要注意的是,在C:\Windows\Microsoft.NET\Framework目錄下有很多類似版本,具體去哪個目錄要看專案的執行環境,例 如果是.net framework2.0則需要輸入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

這裡寫圖片描述

c . 輸入 InstallUtil.exe E:…\TestServert.exe 回車
說明:E:…\TestServer.exe表示專案生成的exe檔案位置

這裡寫圖片描述

開啟服務,就可以看到已經安裝的服務了

9 – >解除安裝服務

解除安裝很簡單,開啟cmd, 直接輸入 sc delete TestServer便可.刪除服務的時候,E:…\TestServert.exe這個路徑必須存在,否則會刪除不成功。

10 – > 服務的除錯:

這裡寫圖片描述

也就是說VS中不能直接除錯windows服務。除錯方法:

a. 通過附加到程序除錯(在網上查到過,不過沒試過)

這裡寫圖片描述

b . 建立另外的專案,單獨除錯服務中的方法,即demo中 DoWork()方法,測試方法的正確性。

c . 直接安裝服務,執行,通過日誌來判斷服務的執行狀況。

比較喜歡的是b c 兩種方法聯合起來使用。