用C#建立Windows Service

來源:互聯網
上載者:User
      現在的.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;

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 :\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.          在VS中,從菜單中選擇Debug->Attach Process….,將會出現:

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.