標籤:
在傳統的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%~d0cd %~dp0cd..rem ApplicationServer.exe install -servicename "ApplicationServer" -displayname "ApplicationServer" -description "XX業務管理系統"ApplicationServer.exe install@echo 啟動服務...ApplicationServer.exe startecho 啟動結束
啟動服務:
sc start "ApplicationServer"
停止服務:
sc stop "ApplicationServer"
卸載服務:
ApplicationServer.exe uninstall
運行第一個啟動服務的批次檔,將輸出下面的內容:
Configuration Result:[Success] Name DEV_DXN_ApplicationServer[Success] DisplayName ApplicationServer[Success] Description XXX業務管理系統[Success] ServiceName ApplicationServerTopshelf 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 ApplicationServerTopshelf v3.0.105.0, .NET Framework v4.0.30319.34014The ApplicationServer service is not installed.
過程全部完成。
使用TopSelf建立自宿主的Windows服務程式