用C#建立Windows Servicewindows
如今的.NET框架已經爲Windows service的開發提供足夠強大的支持,你只須要關注service所要實現的邏輯,而徹底不用關心service底層是如何實現的,相比之前用MFC來講,真是質的飛躍啊。閒話少談,看看如何實現一個最基本的windows service,以及如何來調試windows service。
打開VS 2005,點擊File->New->Project….,在建立工程嚮導中選擇Windows service模板,在工程名輸入框中,輸入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方法裏輸入代碼實現日誌寫入,代碼以下:
框架
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;ide
namespace TestService
{
public partial class MyFirstService : ServiceBase
{
public MyFirstService()
{
InitializeComponent();
}工具
protected override void OnStart(string[] args)
{
// TODO: Add code here to start your service.
eventLog1.WriteEntry("Service start");
}性能
protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop your service.
eventLog1.WriteEntry("Service stop");
}
}
}
要運行這個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 c:\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。在這裏邊,咱們能夠啓動,關閉服務,還能夠設置服務的啓動類型。而後,咱們看看服務有沒有正確的寫入日誌,咱們須要進入到事件查看器,要打開「事件查看器」,請單擊「開始」,指向「設置」,而後單擊「控制面板」。單擊「性能和維護」,單擊「管理工具」,而後雙擊「事件查看器」。以下圖所示,咱們的消息已經成功的寫到了系統日誌裏了。
若是你不須要這個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. 測試