/// <summary>
 /// Обновление шаблона базы с помощью *.cfu
 /// </summary>
 /// <param name="path1CExe">Путь к 1С</param>
 /// <param name="server1C">Адресс сервера 1С</param>
 /// <param name="userLogin">Имя пользователя по умалчиванию</param>
 /// <param name="lockCode">Код блокировки базы 1С</param>
 /// <param name="templateDetail">Информация о шаблоне из xml, выбраная на форме</param>
 public UpdateIbTemplateCommand(string path1CExe, string infobasePath, TemplateDetailInformation templateDetail, string xmlPath)
 {
     _path1CExe      = path1CExe;
     _infobasePath   = infobasePath;
     _templateDetail = templateDetail;
     _xmlPath        = xmlPath;
 }
        /// <summary>
        /// Получение детальной информации об обновлениях шаблона из xml
        /// </summary>
        /// <param name="prevVersion">Текущая версия</param>
        /// <param name="updatesInFolder">Список обновлений, которые находятся в папке</param>
        /// <returns>Перечисление названий обновлений, которые необходимо поставить, с учётом текущей версии</returns>
        private IEnumerable <string> GetInfoListUpdates(string prevVersion, IEnumerable <string> updatesInFolder)
        {
            _log.Trace("Get updates information from xml");

            var templateInfo = new TemplateDetailInformation();

            templateInfo.Updates = _templateDetail.Updates;

            var currentVersion = prevVersion;

            var result = new List <string>();

            try
            {
                while (true)
                {
                    // получаем версии обновлений, для которых используемая версия отличается от текущей (из xml)
                    var updateVersions = templateInfo.Updates.Where(upd =>
                                                                    upd.ApplyVersions.Any(version => VersionComparer.CompareSt(version, currentVersion) == 0)).
                                         Select(upd => upd.UpdateVersion);

                    _log.Info("Updates version {0}", updateVersions);

                    // далее из полученного выбираем ту версию, которая отличается от версий обновлений в папке (самую последнюю)
                    var updVersion = updateVersions.Where(version => updatesInFolder.Any(versionInFile =>
                                                                                         VersionComparer.CompareSt(version, versionInFile) == 0)).OrderByDescending(version =>
                                                                                                                                                                    version, new VersionComparer()).FirstOrDefault();

                    _log.Info("updVersion {0}", updVersion);

                    if (!string.IsNullOrEmpty(updVersion))
                    {
                        currentVersion = updVersion;

                        // и если всё хорошо, то добавляем её к списку требуемых к загрузке обновлений
                        result.Add(updVersion);
                    }
                    else
                    {
                        break;
                    }
                }

                _log.Trace("Getting updates information from xml has been completed");
            }
            catch (Exception ex)
            {
                _log.Error("Error during getting detail information from xml file: {0}", ex.Message);
            }

            return(result);
        }
        public static TemplateDetailInformation GetSelectedTemplateInfoFromXml(string innerXml)
        {
            var templateInfo = new TemplateDetailInformation();

            try
            {
                var reader     = new StringReader(innerXml);
                var serializer = new XmlSerializer(typeof(TemplateDetailInformation));
                templateInfo = (TemplateDetailInformation)serializer.Deserialize(reader);
                reader.Close();
            }
            catch (Exception ex)
            {
                _log.Error("Deserialization to TemplateDetailInformation was failed. Error: {0}", ex.Message);
            }

            return(templateInfo);
        }
 /// <summary>
 /// При создании экземпляра класса, сразу получаем выбранный шаблон из xml
 /// </summary>
 /// <param name="xmlData">Данные из xml</param>
 public TemplateUpdateManager(string xmlData)
 {
     _templateDetail = CustomXmlSerializer.GetSelectedTemplateInfoFromXml(xmlData);
 }