public async Task <int> RunAsync([NotNull] params string[] args) { if (args == null) { throw new ArgumentNullException(nameof(args)); } try { WebHost = HostBuilder.Build(); } catch (Exception ex) when(!ex.IsFatal()) { Logger.Fatal(ex, "Could not build web host {Application}", AppInstance); throw new DeployerAppException($"Could not build web host in {AppInstance}", ex); } if (args.Any(arg => arg.Equals(ApplicationConstants.RunAsService))) { Logger.Information("Starting {AppInstance} as a Windows Service", AppInstance); try { WebHost.CustomRunAsService(this); } catch (Exception ex) when(!ex.IsFatal()) { Logger.Fatal(ex, "Could not start web host as a Windows service, {AppInstance}", AppInstance); throw new DeployerAppException($"Could not start web host as a Windows service, configuration, {Configuration?.SourceChain} {AppInstance} ", ex); } } else { Logger.Information("Starting as a Console Application, {AppInstance}", AppInstance); try { await WebHost.StartAsync(CancellationTokenSource.Token); } catch (Exception ex) when(!ex.IsFatal()) { Logger.Fatal(ex, "Could not start web host, {AppInstance}", AppInstance); throw new DeployerAppException($"Could not start web host, configuration {Configuration?.SourceChain} {AppInstance}", ex); } } LogConfigurationValues(); return(0); }