首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

C# 建立 Windows 服務完整教學:從專案建立到安裝部署

     編輯:Java 相關知識

C# Windows 服務開發入門指南

在 C# 中建立 Windows 服務相當直觀,所有相關類別都位於 System.ServiceProcess 命名空間下。每個服務都必須繼承 ServiceBase 類別,並覆寫啟動、暫停、停止等核心方法。Windows 服務的相關資訊存儲在登錄表中,因此它可以在使用者未登入的情況下自動運行。C# 提供了 ServiceProcessInstaller 和 ServiceInstaller 兩個安裝類別,讓開發者無需手動操作登錄表即可完成服務安裝。

建立 Windows 服務專案

首先在 Visual Studio 中建立一個「Windows 服務」專案:

建立 Windows 服務專案

專案建立成功後,預設會包含 Program.cs 和 Service1.cs 兩個核心檔案:

專案結構

程式進入點與服務陣列

Program.cs 只包含服務運行的相關資訊,支援在單一進程中運行多個服務實例:

/// <summary>
/// 應用程式的主進入點。
/// </summary>
static void Main()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new Service1() // 這裡是一個陣列,意味著我們可以在一個服務進程中建立多個服務實例
    };
    ServiceBase.Run(ServicesToRun);
}

核心服務邏輯實作

Service1.cs 是我們需要實作的服務類別,包含 Start、Stop、Pause、Continue 等基本操作。這裡示範在服務啟動和停止時,分別記錄一條訊息到 D 槽:

protected override void OnStart(string[] args)
{
    File.AppendAllText("d:" + this.GetType().Name + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 服務啟動"));
}

protected override void OnStop()
{
    File.AppendAllText("d:" + this.GetType().Name + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 服務停止"));
}

加入安裝資訊

雙擊專案中的 Service.cs 進入服務設計介面,在空白處右鍵選擇「加入安裝程式」:

加入安裝程式

VS 會自動建立 ProjectInstaller.cs 並切換到設計介面,預設包含兩個元件:

  • serviceProcessInstaller1:設定服務所屬帳戶,關係到服務的執行權限
  • serviceInstaller1:服務資訊描述,如服務名稱、是否自動啟動等

設定 serviceProcessInstaller1 的 Account 屬性為 LocalSystem:

設定服務帳戶

設定 serviceInstaller1 的 StartType 為 Automatic(自動啟動),Description 為「我的第一個 Windows 服務」:

設定服務屬性

安裝與驗證服務

建置專案後,找到產生的執行檔。因為 Windows 服務無法透過雙擊直接執行,必須使用 .NET 提供的 InstallUtil.exe 來安裝:

使用 InstallUtil 安裝

按 Enter 開始安裝,成功會提示「認可階段已成功完成」,失敗則顯示「回復階段已成功完成」:

安裝結果

打開 Windows 服務管理器即可看到安裝的服務,預設安裝成功後不會立即啟動,需手動啟動:

服務管理器

啟動成功後狀態顯示為「已啟動」:

服務運行中

到 D 槽根目錄下找到 Service1.txt,開啟即可看到記錄的啟動/停止資訊,證明服務運作正常。

移除服務

若需解除安裝,可使用以下兩種方式之一:

  • InstallUtil.exe /u WindowsService1.exe
  • 系統指令 sc delete 服務名稱
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved