Topshelf一個用於使用.NET構建Windows服務框架
- 2021 年 4 月 3 日
- 筆記
- ASP.NET Core開發者指南, Topshelf, Windows服務
1 Topshelf是什麼?
Topshelf是用於託管使用.NET框架編寫的Windows服務的框架。服務的創建得到簡化,從而使開發人員可以創建一個簡單的控制台應用程式,可以使用Topshelf將其作為服務安裝。原因很簡單:調試控制台應用程式比服務容易得多。一旦對應用程式進行了測試並準備投入生產,Topshelf便可以輕鬆地將應用程式即服務安裝。
2 使用
2.1 創建應用程式
首先,創建一個新的控制台應用程式並從nuget獲取Topshelf軟體包
Topshelf
當您使用Topshelf時,我還建議裝一下日誌庫,我們可以選擇日誌框架Serilog。
Topshelf.Serilog
Serilog.Sinks.Console
2.2 創建服務類
然後,創建服務類。我將其命名為MyService。在這裡放置將在Windows服務的特定生命周期事件中調用的方法。至少,添加一些用於啟動和停止服務的方法。
public class MyService
{
readonly ILogger log = Log.ForContext(MethodBase.GetCurrentMethod().DeclaringType);
public void Start()
{
log.Information("Starting MyService...");
}
public void Stop()
{
log.Information("Stopping MyService...");
}
}
2.3 在Topshelf中註冊服務
接著,在Topshelf中註冊我們的服務類。跳轉到Program.cs並添加:
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.MinimumLevel.Debug()
.CreateLogger();
var rc = HostFactory.Run(x =>
{
x.UseSerilog(); // HostLogger改為使用Serilog。
x.SetDisplayName("我的服務"); // 我們設置要在Windows服務監視器中使用的winservice的顯示名稱。
x.SetDescription("我的服務詳細描述"); // 我們設置了在Windows服務監視器中使用的winservice的描述。
x.SetServiceName("MyService"); // 我們設置要在Windows服務監視器中使用的winservice的服務名稱。
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService()); // 構建服務實例。
s.WhenStarted(tc => tc.Start()); // 啟動服務
s.WhenStopped(tc => tc.Stop()); // 停止服務
});
x.RunAsLocalSystem(); // 設置「登錄為」並選擇了「本地系統」。
x.StartAutomatically(); // 設置「啟動類型」並選擇了「自動」。
});
var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); // 我們轉換並返回服務退出程式碼。
Environment.ExitCode = exitCode;
}
}
2.4 運行應用程式
接著,F5執行應用程式,如果一切順利,你應該會看到類似以下內容的資訊:
2.5 安裝Windows服務
最後,安裝Windows服務,以管理員身份打開命令行,瀏覽到exe目錄並使用install參數調用它:
S045.Topshelf.ConsoleApp.exe install
現在,您可以在「服務」窗口中籤出新註冊的Windows服務。