Topshelf是用於託管使用.NET框架編寫的Windows服務的框架。服務的建立獲得簡化,從而使開發人員能夠建立一個簡單的控制檯應用程序,能夠使用Topshelf將其做爲服務安裝。緣由很簡單:調試控制檯應用程序比服務容易得多。一旦對應用程序進行了測試並準備投入生產,Topshelf即可以輕鬆地將應用程序即服務安裝。windows
首先,建立一個新的控制檯應用程序並從nuget獲取Topshelf軟件包框架
Topshelf
當您使用Topshelf時,我還建議裝一下日誌庫,咱們能夠選擇日誌框架Serilog。測試
Topshelf.Serilog Serilog.Sinks.Console
而後,建立服務類。我將其命名爲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..."); } }
接着,在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; } }
接着,F5執行應用程序,若是一切順利,你應該會看到相似如下內容的信息:
日誌
最後,安裝Windows服務,以管理員身份打開命令行,瀏覽到exe目錄並使用install參數調用它:code
S045.Topshelf.ConsoleApp.exe install
如今,您能夠在「服務」窗口中籤出新註冊的Windows服務。
orm