static void Main(string[] args) { ConfigureSerilog(); var settings = new SettingsFromAppConfig(); HostFactory.Run(x => { x.Service <IISExpressHost>(s => { s.ConstructUsing(name => new IISExpressHost()); s.WhenStarted((tc, hostControl) => tc.Start(hostControl)); s.WhenStopped(tc => tc.Stop()); }); if (settings.RunAsLocalService) { x.RunAsLocalService(); } x.OnException(OnException); x.SetDescription(settings.ServiceDescription); x.SetDisplayName(settings.ServiceDisplayName); x.SetServiceName(settings.ServiceName); }); _logger.Information("IISExpress.Service exiting"); }
public bool Start(HostControl hostControl) { _hostControl = hostControl; var config = new SettingsFromAppConfig(); string iisExpress = config.IISPath; StringBuilder arguments = new StringBuilder(); string webSitePath = config.WebSitePath; string port = config.Port; arguments.Append($"/path:\"{webSitePath}\""); arguments.Append($" /Port:{port} /systray:false"); _process = Process.Start(new ProcessStartInfo() { FileName = iisExpress, Arguments = arguments.ToString(), RedirectStandardOutput = true, RedirectStandardInput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true, }); _iisMonitor = new Thread(MonitorIISExpress) { Name = "IISMonitor" }; _iisMonitor.Start(); // Close stdout for Swagger to work properly _process.StandardOutput.Close(); return(true); }