通過TopSelf組件實現服務的自宿主,簡化服務的安裝和使用過程。 ...
在傳統的Windows服務開發過程中,需要添加一個服務安裝程式,裡面寫安裝,啟動和停止服務等邏輯。現在,使用TopSelf可以簡化這個過程。
首先,繼承 ServiceControl 寫一個應用服務類:
internal class AppService : ServiceControl { ILog log = LogManager.GetLogger(typeof(AppService)); public void Initialize() { log.Info("Initialize"); Console.WriteLine("Engine starting...."); EngineContext.Initialize(false); Console.WriteLine("Engine started"); } public bool Start(HostControl hostControl) { Console.WriteLine("Hosts starting...."); ServiceHostHelper.OpenWcfService(); Console.WriteLine("Hosts started"); return true; } public bool Stop(HostControl hostControl) { ServiceHostHelper.CloseWcfService(); return true; } }
然後,在主程式裡面,寫如下代碼:
static void Main(string[] args) { try { HostFactory.Run(x => { x.RunAsLocalSystem(); x.StartAutomatically(); //x.StartManually(); var defaultName = GetDefaultServiceName(); var config = DXNConfig.Current.AppServer; x.SetServiceName("我的服務1"); x.SetDisplayName("我的服務1"); x.SetDescription("我的服務1描述"); x.Service(factory => { var service = new AppService(); service.Initialize(); return service; }); }); } catch (Exception ex) { try { LogManager.GetLogger(typeof(Program)).Fatal("AppServer launch error", ex); } catch { } //throw; } } }
這些服務名稱性信息是可以修改的。
好了,現在編譯,我們的程式就可以當服務使用了。
之後,就可以用命令行來安裝服務:
@echo off %~d0 cd %~dp0 cd.. rem ApplicationServer.exe install -servicename "ApplicationServer" -displayname "ApplicationServer" -description "XX業務管理系統" ApplicationServer.exe install @echo 啟動服務... ApplicationServer.exe start echo 啟動結束
啟動服務:
sc start "ApplicationServer"
停止服務:
sc stop "ApplicationServer"
卸載服務:
ApplicationServer.exe uninstall
運行第一個啟動服務的批處理文件,將輸出下麵的內容:
Configuration Result: [Success] Name DEV_DXN_ApplicationServer [Success] DisplayName ApplicationServer [Success] Description XXX業務管理系統 [Success] ServiceName ApplicationServer Topshelf v3.0.105.0, .NET Framework v4.0.30319.34014 正在運行事務處理安裝。 正在開始安裝的“安裝”階段。 Installing DXN ApplicationServer service 正在安裝服務 DXN_ApplicationServer... 已成功安裝服務DXN_ApplicationServer。 正在日誌 Application 中創建 EventLog 源 ApplicationServer... “安裝”階段已成功完成,正在開始“提交”階段。 “提交”階段已成功完成。 已完成事務處理安裝。 啟動服務... Configuration Result: [Success] Name DXN_ApplicationServer [Success] DisplayName ApplicationServer [Success] Description XX管理系統 [Success] ServiceName ApplicationServer Topshelf v3.0.105.0, .NET Framework v4.0.30319.34014 The ApplicationServer service is not installed.
過程全部完成。