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