Пример #1
0
        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");
        }
Пример #2
0
        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);
        }