public void Start(Type appType = null) { // если нет параметров - это ошибка if (Parameters == null || Parameters.Count == 0) { throw new OperationException("Arguments is not defined. Please, check command line arguments"); } // применяем параметры if (Parameters.ContainsKey(ConfigBase.NameParam)) { // вычитываем имя var name = Parameters[ConfigBase.NameParam]; Log4NetHelper.SetServiceName(string.Format("_{0}", name)); // Добавляем суффикс к имени сервиса ServiceName += ":" + name; DisplayName = ServiceName; } Log4NetHelper.Configure(_defaultName); // определяем комманду на удаление сервиса var isNeedRemoveService = Parameters.ContainsKey(ParamServiceNo); if (isNeedRemoveService) { RemoveService(); return; } // определяем какой вид запуска (сервис или консоль) var runAsService = Parameters.ContainsKey(ParamService); var context = new ServiceContext(ServiceName, Parameters); //запуск приложения как сервиса if (runAsService) { // если сервиса нет - устанавливаем его и запускаем var sysService = GetInstalledService(); if (sysService == null) { sysService = CreateService(); sysService.Start(); return; } // если сервис есть - запускаем логику var svc = _hostFactory.GetService(context); ServiceBase.Run(svc); } //запуск в режиме консольного приложения else { IAppHost app = null; try { app = _hostFactory.GetApp(context); app.Start(null); _log.Info("Press escape to exit"); ConsoleKeyInfo keyInfo; do { keyInfo = Console.ReadKey(); }while (keyInfo.Key != ConsoleKey.Escape); } catch (Exception ex) { _log.Error("Fatal error." + ExceptionHelper.ExceptionToString(ex), ex); } finally { if (app != null) { app.Stop(); } } } }