C# 創建 Windows 服務

真笨,想建立個Windows 服務項目,半天沒看懂,網上找個例子好方便下次參考 對應C# Windows 服務

 

現在的。NET框架已經爲Windows service的開發提供足夠強大的支持,你只需要關注service所要實現的邏輯,而完全不用關心service底層是如何實現的,相比以前用MFC來說,真是質的飛躍啊。閒話少談,看看如何實現一個最基本的windows service,以及如何來調試windows service.

  打開VS 2005,點擊File->New->Project…。,在創建工程嚮導中選擇Windows service模板,如下圖所示:

  20071221101250307.jpg

  在工程名輸入框中,輸入TestService然後點擊OK.VS爲我們生成了最基本的代碼,我們將Service的名稱改爲我們期望的名稱,在solution explorer中右鍵點擊vs自動生成的service文件“Service1.cs”,在彈出的菜單中選擇Rename,輸入“MyFirstService”,然後切換到設計視圖,也就是在solution explorer中雙擊MyfirstService.cs,在Property Explorer中將ServiceName屬性改爲MyFirstService,這時一個可運行的windows service已經創建成功。我們添加一些代碼來測試一下這個service,最簡單的測試方式就是向windows event log裏來添加一些消息以顯示我們的Service的狀態。

  我們需要一個EventLog組件向windows log中添加信息,在solution explorer中雙擊MyfirstSerice文件切換到設計視圖,將工具箱中的EventLog組件拖到設計視圖中,我們保留EventLog組件的默認名稱eventLog1.選中eventLog1,在property explorer中將Log屬性選爲Application,在Source屬性中輸入“MyFirstService”。接下來,我們在設計視圖的空白處,右鍵點擊,並選擇View Code切換到代碼視圖,在OnStart和OnStop方法裏輸入代碼實現日誌寫入,代碼如下:

  要運行這個service我們還要做下邊的幾個步驟:

  1.爲我們的Service添加Installer,右鍵點擊設計視圖,選擇Add Installer,VS將會爲我們添加ProjectInstaller.cs,並在ProjectInstaller中添加組件serviceInstaller1和serviceProcessInstaller1,現在我們來修改他們的屬性來控制Service的安裝和啓動選項。在ProjectInstaller得設計視圖中選中serviceProcessInstaller1,將它得Account屬性選爲LocalSystem,這樣以這個帳號服務啓動。如果你希望系統啓動時自動啓動服務得話,將serviceInstaller1的StartType的屬性選爲Automatic,如果手動啓動的話,選爲manaul.

  2.安裝service,我們要用到IntallUtil.exe這個程序,這個程序位於C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727.點擊開始菜單,選擇“運行”,在運行對話框中輸入cmd,進入到命令行窗口,輸入cd :/WINDOWS/Microsoft.NET/Framework/v2.0.50727,進入到這個目錄,然後輸入installutil F:/Programs/C#/TestService/TestService/bin/Debug/testserveice.exe, installutil後邊的內容就是我們的工程生成的可執行程序的路徑,情根據需要修改。

  如果你給ServiceInstaller1的StartType設爲Automatic的話,安裝完服務,服務已經運行起來了,如果StartType是Manual的話,你需要手動啓動。現在我們進入“服務”,要打開“服務”,請單擊“開始”,指向“設置”,然後單擊“控制面板”。依次單擊“性能和維護”、“管理工具”,然後雙擊“服務”。在裏邊你應該能夠看到我們製作的Service MyFirstService.在這裏邊,我們可以啓動,關閉服務,還可以設置服務的啓動類型。然後,我們看看服務有沒有正確的寫入日誌,我們需要進入到事件查看器,要打開“事件查看器”,請單擊“開始”,指向“設置”,然後單擊“控制面板”。單擊“性能和維護”,單擊“管理工具”,然後雙擊“事件查看器”。如下圖所示,我們的消息已經成功的寫到了系統日誌裏了。

  20071221101331308.jpg

  如果你不需要這個Service了,仍然使用InstallUtil這個程序來卸載,不過在InstallUtil後跟參數 –u,比如installutil –u F:/Programs/C#/TestService/TestService/bin/Debug/testserveice.exe.

  Service的調試方法與普通的程序調試方法是不一樣的。我來介紹一下。

 

1. Build你的項目

  2. 設置斷點,因爲我們的Service非常的簡單,沒有什麼執行邏輯,所以設置斷點沒有任何意義,大家可以自己寫一些代碼來實踐。一般來說,我們服務裏需要用到一個另外的線程來執行任務,你需要在線程的執行代碼中來設置斷點。

  3. 安裝service,我們前邊有介紹如何安裝。

  4. 如果你的Service啓動類型是手動(Manual),你需要到“服務”裏啓動你的Service.一般來說,如果你的service在開發階段,我推薦你將Service的啓動類型設置爲Manual,這樣便於調試,因爲如果service在運行過程中,你將無法build工程。

  5. 在VS中,從菜單中選擇Debug->Attach Process…。,將會出現下圖:

  20071221101334423.jpg

  裏邊列出了正在運行的進程,如果你找不到自己的service,請選中Show processes from all users.在Available processes列表中選中我們的service所在的進程TestService,然後點擊Attach按鈕,如果你設置的斷點合理的話,那麼,程序就會停在斷點處,接下來你就可以進行調試了。

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.ServiceProcess;
  7. using System.Text;
  8. namespace TestService
  9. {
  10.     public partial class MyFirstService : ServiceBase
  11.     {
  12.         public MyFirstService()
  13.         {
  14.             InitializeComponent();
  15.         }
  16.         protected override void OnStart(string[] args)
  17.         {
  18.             // TODO: Add code here to start your service.
  19.             eventLog1.WriteEntry("Service start");
  20.         }
  21.         protected override void OnStop()
  22.         {
  23.             // TODO: Add code here to perform any tear-down necessary to                        stop your service.
  24.             eventLog1.WriteEntry("Service stop");
  25.         }
  26.     }
  27. }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章