private static void CreateHost(HostConfigurator config, out AppServiceOptions serviceOptions) { // Чтение параметров командной строки var parameters = config.SelectPlatform(i => i.AddStringParameter("packageId") .AddStringParameter("packageVersion") .AddStringParameter("packageInstance") .AddStringParameter("packageDirectory") .AddStringParameter("packageTimeout") .AddStringParameter("startOptions")); serviceOptions = ParseServiceOptions(parameters); // Установка текущего каталога приложения Directory.SetCurrentDirectory(serviceOptions.PackageDirectory); // Установка таймаута для запуска и остановки var serviceTimeout = TimeSpan.MaxValue; if (serviceOptions.PackageTimeout != null) { serviceTimeout = TimeSpan.FromSeconds(serviceOptions.PackageTimeout.Value); config.SetStartTimeout(serviceTimeout); config.SetStopTimeout(serviceTimeout); } config.Service<AppServiceHost>(s => { // Создание экземпляра приложения s.ConstructUsing(hostSettings => { try { var instance = new AppServiceHost(); return instance; } catch (Exception exception) { Console.WriteLine(exception); throw; } }); // Запуск экземпляра приложения s.WhenStarted((instance, hostControl) => { try { instance.Start(serviceTimeout); return true; } catch (Exception exception) { Console.WriteLine(exception); throw; } }); // Остановка экземпляра приложения s.WhenStopped((instance, hostControl) => { try { instance.Stop(serviceTimeout); return true; } catch (Exception exception) { Console.WriteLine(exception); throw; } }); }); // Установка имени службы var serviceName = GetServiceName(serviceOptions); config.SetServiceName(serviceName); config.SetDisplayName(serviceName); config.SetDescription(serviceName); // Установка экземпляра службы var serviceInstance = serviceOptions.PackageInstance; if (!string.IsNullOrWhiteSpace(serviceInstance)) { config.SetInstanceName(serviceInstance); } }
private static string GetServiceName(AppServiceOptions serviceOptions) { return $"{serviceOptions.PackageId}.{serviceOptions.PackageVersion}"; }