.net下開發WINDOWS 服務

來源:互聯網
上載者:User
Microsoft Windows 服務(即,以前的 NT 服務)使您能夠建立在它們自己的 Windows 會話中可長時間啟動並執行可執行應用程式。這些服務可以在電腦啟動時自動啟動,可以暫停和重新啟動而且不顯示任何使用者介面。這使服務非常適合在伺服器上使用,或任何時候,為了不影響在同一台電腦上工作的其他使用者,需要長時間運行功能時使用。還可以在不同於登入使用者的特定使用者帳戶或預設電腦帳戶的安全上下文中運行服務。

建立 Windows 服務

當建立服務時,可以使用稱作 Windows 服務的 Visual Studio .NET 項目模板。此模板引用適當的類和命名空間、設定從服務基類的繼承並重寫您可能要重寫的幾種方法,從而自動為您完成大部分工作。

若要建立功能性服務,必須至少:

  • 設定 ServiceName 屬性。
  • 為服務應用程式建立必要安裝程式。
  • 重寫 OnStart 和 OnStop 方法並為其指定代碼以自訂服務的行為方式。

在將安裝程式添加到應用程式之後,下一步是建立安裝項目,該項目將安裝已編譯的專案檔並運行安裝服務所需的安裝程式。若要建立完整的安裝項目,您必須將服務項目的輸出添加到該安裝項目,然後添加自訂動作以安裝您的服務。

  1. 建立一個 Windows 服務項目。
  2. 在“屬性”視窗中,設定服務的 ServiceName 屬性。 (注意   ServiceName 屬性的值必須始終與安裝程式類中記錄的名稱匹配。如果更改此屬性,還必須更新安裝程式類中的 ServiceName 屬性。)
  3. 設定下列所有屬性以確定服務的工作機制。
    屬性 設定
    CanStop True 表示服務將接受停止啟動並執行請求;false 表示禁止服務停止。
    CanShutDown True 表示服務希望在運行它的電腦關閉時收到通知,以便能夠調用 OnShutDown 過程。
    CanPauseAndContinue True 表示服務將接受暫停或繼續啟動並執行請求;false 表示禁止服務暫停和繼續。
    CanHandlePowerEvent True 表示該服務可以處理有關電腦電源狀態更改的通知;false 表示禁止服務得到有關這些更改的通知。
    AutoLog

    True 表示在服務執行操作時將資訊項寫入應用程式的事件記錄;false 表示禁用此功能。(注意   預設為 true。)

    注意   當 CanStop 或 CanPauseandContinue 設定為 false 時,服務控制管理員將禁用停止、暫停或繼續服務的相應菜單選項。

  4. 存取碼編輯器,並為 OnStart 和 OnStop 過程填寫所需的處理。
  5. 重寫其他所有要為其定義功能的方法。
  6. 添加服務應用程式所必要安裝程式。
  7. 通過從“產生”菜單中選擇“產生解決方案”來產生項目。 (注意   不要通過按 F5 鍵來運行項目,不能以這種方式運行服務項目。)  

執行個體:
建立一個名為MyService的Windows服務項目,將Service1.cs及代碼裡的類名改為你想要的名字,我這裡統一用MyService;
using System.Threading;
一個後台服務線程,private Thread backThread=null;
在建構函式裡執行個體化線程,this.backThread=new Thread(new ThreadStart(this.Running));
在類裡添加private void Running(){}方法,一般要讓線程一直處於運行狀態來處理你給它安排的工作,例如根據訊息佇列裡的訊息,執行下載任務下載檔案。
private void Running()
{
  while(true)
  {
  //你的處理
  Thread.Sleep(5*1000);//例如讓線程休眠5秒
  }
}
重寫線程的控制函數
protected override void OnStart(string[] args)
  {
   this.backThread.Start();
  }
  protected override void OnStop()
  {
   this.backThread.Abort();
  }
  protected override void OnPause()
  {
   this.backThread.Suspend();
  }
  protected override void OnContinue()
  {
   this.backThread.Resume();
  }
同時你也可以根據需要按照上面表格所列的屬性進行設定。

在該項目上點右鍵選擇添加-添加類-安裝程式類,取名Install.cs
在Install.cs的視圖設計器裡為它添加ServiceInstall和ServiceProcessInstall控制項,可以為這2個控制項設定屬性,例如可以在ServiceInstall的ServiceDependedOn屬性裡設定服務依賴。

產生解決方案,下面介紹如何安裝服務

安裝和卸載服務

手動安裝服務

  1. 訪問項目中的已編譯可執行檔所在的目錄。
  2. 用項目的輸出作為參數,從命令列運行 InstallUtil.exe。在命令列中輸入下列代碼:
    installutil yourproject.exe

手動卸載服務

  • 用項目的輸出作為參數,從命令列運行 InstallUtil.exe。在命令列中輸入下列代碼:
    installutil /u yourproject.exe
調試 Windows 服務應用程式

由於服務必須從服務控制管理員的上下文中運行,而不是從 Visual Studio .NET 中運行,因此調試服務不像調試其他 Visual Studio 應用程式類型那樣簡單。若要調試服務,必須首先啟動服務,然後將一個調試器附加到正在運行服務的進程中。然後可以使用 Visual Studio 的所有標準調試功能來調試應用程式。

警告   除非知道進程是什麼,並且知道附加到進程或可能會取消進程所帶來的後果,否則不要附加到進程。例如,如果附加到 WinLogon 進程,然後停止調試,系統就會暫停,因為沒有 WinLogon,系統無法運行。

只能將調試器附加到正在啟動並執行服務。附加進程會中斷服務的當前運行;它並不真正終止或暫停服務的處理。也就是說,如果開始調試時服務正在運行,則在進行調試時,該服務從技術上說仍處於“已啟動”狀態,但它的處理已掛起。

附加到服務的進程使您能夠調試大多數服務代碼,但並非全部;例如,由於服務已經啟動,因此不能用這種方法調試服務的 OnStart 方法中的代碼,或調試用於載入服務的 Main 方法中的代碼。解決此問題的一個方法是:在唯一作用是協助調試的服務應用程式中建立一個臨時服務。可以將兩個服務都安裝上,然後啟動此“虛擬”服務載入服務進程。臨時服務啟動了進程後,就可以使用 Visual Studio .NET 中的“調試”菜單來附加到服務進程。

當附加該進程之後,可以設定斷點並使用這些斷點來調試代碼。當退出用於附加到該進程的對話方塊時,實際上已處於偵錯模式。您可以使用服務控制管理員開始、停止、暫停和繼續您的服務,因此命中已設定的斷點。調試成功後,移除此“虛擬”服務。

注意   調試 OnStart 方法可能比較困難,因為 Windows 服務管理員將所有嘗試啟動服務的時間限制在 30 秒內。當調試 Windows 服務應用程式時,服務與“Windows 服務管理員”進行互動。“服務管理員”通過調用 OnStart 方法啟動服務,然後花 30 秒時間等待 OnStart 方法返回。如果在這段時間內方法沒有返回,管理器將顯示一個服務無法啟動的錯誤。如果在 OnStart 方法中放置一個斷點並且在 30 秒內不通過該斷點,則管理器不會啟動服務。

調試服務

  1. 安裝您的服務。
  2. 可從服務控制管理員、“伺服器總管”或代碼啟動服務。
  3. 在 Visual Studio 中,從“調試”菜單中選擇“進程”。 出現“進程”對話方塊。
  4. 單擊“顯示系統進程”。
  5. 在“可用進程”地區內單擊服務的進程,然後單擊“附加”。 (提示   此進程將與服務的可執行檔同名。)出現“附加到進程”對話方塊。
  6. 選擇任意適當選項,然後單擊“確定”關閉對話方塊。 (注意   您現在已處於偵錯模式。)
  7. 設定要在代碼中使用的任意斷點。
  8. 訪問服務控制管理員並操縱您的服務,並發送停止、暫停和繼續命令以命中您的斷點。

相關文章

聯繫我們

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