目錄nginx
Net Core的本質是窗口程序(windows下的表現形式是console窗口)。客戶與本公司的產品部經理都反饋若是不當心關閉了窗口,整個程序被關閉,後果可能會很嚴重,故將軟件經過TopShelf作成服務模式,經過cmd的指令來安裝,啓動,中止卸載此程序。web
好比內存超過1G時,設置重啓。redis
避免窗口模式誤關閉。數據庫
Program.cs文件,詳見註釋json
var rc = HostFactory.Run(x => { /*運行MainService主程序*/ //建立一個MainService服務實例 x.Service<MainService>(s => { //通知TopShelf 這裏有一個MainService類型的服務,經過s來配置他的參數 s.ConstructUsing(name => new MainService(Directory.GetCurrentDirectory())); //TopShelf啓動服務 s.WhenStarted(tc => tc.Start()); //TopShelf中止服務 s.WhenStopped(tc => tc.Stop()); }); //x.RunAs("username", "password");也能夠用戶名密碼方式運行 x.RunAsLocalSystem(); //服務描述 x.SetDescription("WEBAPIService"); //服務顯示名稱 x.SetDisplayName("WEBAPIService"); //服務名稱 x.SetServiceName("WEBAPIService"); }); //轉化退出編碼 var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); //設置退出編碼 Environment.ExitCode = exitCode;
MainService.cs文件,詳見註釋。windows
namespace IBMS.WEBAPI { public class MainService { //建立一個webhost實例 private IWebHost _webHost; private readonly string _contentRoot; public MainService(string contentRoot) { _contentRoot = contentRoot; } //服務模式啓動程序 public void Start() { // 獲取連接字符串 var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); //配置webhost _webHost = new WebHostBuilder() .UseKestrel() .UseContentRoot(_contentRoot) .UseUrls(config["urls"]) .UseStartup<Startup>() .UseSerilog() .Build(); var _logger = _webHost.Services.GetService<ILoggerFactory>().CreateLogger<MainService>(); _logger.Log(LogLevel.Information, new EventId(1001, "Starting"), "Service Starting"); //種子數據種入數據庫 using (var scope = _webHost.Services.CreateScope()) { try { var context = scope.ServiceProvider.GetService<IIBMSContext>(); var concreteContext = (IBMSContext)context; concreteContext.Database.Migrate(); SeedData.Initialize(concreteContext); } catch (Exception ex) { // var _logger = scope.ServiceProvider.GetRequiredService<ILogger<MainService>>(); _logger.LogError(ex, "An error occurred while migrating or initializing the database."); } } //啓動webhost _webHost.Start(); } public void Stop() { _webHost?.Dispose(); } } }
IBMS.WEBAPI.exe install
IBMS.WEBAPI.exe startapp
IBMS.WEBAPI.exe uninstall
IBMS.WEBAPI.exe stopide
若是您知道或者據說有以下問題的解決方案或者開源項目,煩請告知,讓我也共同進步下,在此謝過。工具
好比windows上的msi安裝包程序。ui
好比該配置工具可以讀入配置文件的參數(config.js,my.ini,appsettings.json,nginx.conf,redis.windows.conf...),而且可以經過該配置管理工具以GUI的人機交互方式將用戶本身的配置數據配置如對應的配置文件。
例如:
例如:
若是您知道以上3點問題的解決方案或者開源項目,懇請賜教,謝謝。