Example #1
0
        public static string GetFieldName <TRoot>(Expression <Func <TRoot, object> > sourceProperty)
        {
            var           propertyChain = PropertyChainFromExp.Get(sourceProperty);
            List <string> names         = new List <string>();

            foreach (var prop in propertyChain)
            {
                var    attrs = (DisplayAttribute[])prop.GetCustomAttributes(typeof(DisplayAttribute), false);
                string namepart;
                if ((attrs != null) && (attrs.Length > 0))
                {
                    namepart = StringWorks.StringToPascalCase(attrs[0].GetName());
                }
                else
                {
                    namepart = prop.Name;
                }

                foreach (var symb in RemovedSimbols)
                {
                    namepart = namepart.Replace(symb, "");
                }

                names.Add(namepart);
            }
            var name = String.Join(".", names);

            return(name);
        }
Example #2
0
        void ExecuteMicroUpdates()
        {
            Version currentDB;

            if (MainSupport.BaseParameters.All.ContainsKey("micro_updates"))
            {
                currentDB = Version.Parse(MainSupport.BaseParameters.All["micro_updates"]);
            }
            else
            {
                currentDB = Version.Parse(MainSupport.BaseParameters.Version);
            }

            while (DBUpdater.microUpdates.Exists(u => u.Source == currentDB))
            {
                var update = DBUpdater.microUpdates.Find(u => u.Source == currentDB);
                RunOneUpdate(update, String.Format("Устанавливаем микро-обновление {0}", StringWorks.VersionToShortString(update.Destanation)));
                currentDB = update.Destanation;
                MainSupport.BaseParameters.UpdateParameter(
                    QSMain.ConnectionDB,
                    "micro_updates",
                    StringWorks.VersionToShortString(currentDB)
                    );
            }
        }
Example #3
0
 void UpdateSize()
 {
     label1.LabelProp = String.Empty;
     if (File != null)
     {
         label1.LabelProp = StringWorks.BytesToIECUnitsString((uint)File.LongLength);
     }
 }
Example #4
0
        void ConfigureDlg()
        {
            yentryName.Binding.AddBinding(Entity, e => e.Name, w => w.Text).InitializeFromSource();
            ylabelSize.Binding.AddFuncBinding(Entity, e => StringWorks.BytesToIECUnitsString((ulong)e.FileSize), w => w.LabelProp).InitializeFromSource();
            ycomboType.ItemsEnum = typeof(ContractType);
            ycomboType.Binding.AddBinding(Entity, e => e.TemplateType, w => w.SelectedItem).InitializeFromSource();

            Entity.PropertyChanged += Entity_PropertyChanged;
        }
Example #5
0
        public static void Main(string[] args)
        {
            Application.Init();
            QSMain.SubscribeToUnhadledExceptions();
            QSMain.GuiThread = System.Threading.Thread.CurrentThread;
            QSSupportLib.MainSupport.Init();
            CreateProjectParam();
            // Создаем окно входа
            Login LoginDialog = new Login();

            LoginDialog.Logo = Gdk.Pixbuf.LoadFromResource("BioGorod.Icons.logo.png");
            LoginDialog.SetDefaultNames("BioGorod");
            LoginDialog.DefaultLogin  = "******";
            LoginDialog.DefaultServer = "localhost";
            LoginDialog.UpdateFromGConf();

            ResponseType LoginResult;

            LoginResult = (ResponseType)LoginDialog.Run();
            if (LoginResult == ResponseType.DeleteEvent || LoginResult == ResponseType.Cancel)
            {
                return;
            }

            LoginDialog.Destroy();

            //Настройка базы
            CreateBaseConfig();

            //Настрока удаления
            ConfigureDeletion();

            //Настройка карты
            GMap.NET.MapProviders.GMapProvider.UserAgent = String.Format("{0}/{1} used GMap.Net/{2} ({3})",
                                                                         QSSupportLib.MainSupport.ProjectVerion.Product,
                                                                         StringWorks.VersionToShortString(QSSupportLib.MainSupport.ProjectVerion.Version),
                                                                         StringWorks.VersionToShortString(System.Reflection.Assembly.GetAssembly(typeof(GMap.NET.MapProviders.GMapProvider)).GetName().Version),
                                                                         Environment.OSVersion.VersionString
                                                                         );
            GMap.NET.MapProviders.GMapProvider.Language = GMap.NET.LanguageType.Russian;

            //Запускаем программу
            MainWin = new MainWindow();
            QSMain.ErrorDlgParrent = MainWin;
            if (QSMain.User.Login == "root")
            {
                return;
            }
            MainWin.Show();
            Application.Run();
        }
Example #6
0
        public void GetOnlyLettersAndDigitsTest()
        {
            try
            {
                StringWorks sw     = new StringWorks();
                String      retVal = sw.GetOnlyLettersAndDigits("ABC 123*D9");

                Assert.IsTrue(retVal.Equals("ABC123D9", StringComparison.CurrentCulture));
            }
            catch (Exception exUnhandled)
            {
                Assert.Fail(exUnhandled.Message);
            }
        }  // END public void GetOnlyLettersAndDigitsTest()
Example #7
0
        public void ReverseWordTest()
        {
            try
            {
                StringWorks sw     = new StringWorks();
                String      retVal = sw.ReverseString("my dog has fleas");

                Assert.IsTrue(retVal.Equals("saelf sah god ym", StringComparison.CurrentCulture));
            }
            catch (Exception exUnhandled)
            {
                Assert.Fail(exUnhandled.Message);
            }
        }  // END public void ReverseWordltTest()
Example #8
0
        public DBUpdateProcess(UpdateHop hop)
        {
            this.Build();

            updateHop             = hop;
            progressbarTotal.Text = String.Format("Обновление: {0} → {1}",
                                                  StringWorks.VersionToShortString(updateHop.Source),
                                                  StringWorks.VersionToShortString(updateHop.Destanation)
                                                  );

            string fileName = System.IO.Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                "Резервные копии",
                String.Format("{0}{1:yyMMdd-HHmm}.sql", MainSupport.ProjectVerion.Product, DateTime.Now)
                );

            entryFileName.Text = fileName;
        }
Example #9
0
        private static void NotAdminErrorAndExit(bool isMicro, Version from, Version to)
        {
            MessageDialog md = new MessageDialog(null, DialogFlags.DestroyWithParent,
                                                 MessageType.Error,
                                                 ButtonsType.Close,
                                                 String.Format(
                                                     "Для работы текущей версии программы необходимо провести{0} обновление базы ({1} -> {2}), " +
                                                     "но у вас нет для этого прав. Зайдите в программу под администратором.",
                                                     isMicro ? " микро" : "",
                                                     StringWorks.VersionToShortString(from),
                                                     StringWorks.VersionToShortString(to)
                                                     ));

            md.Show();
            md.Run();
            md.Destroy();
            Environment.Exit(1);
        }
Example #10
0
        protected void OnButtonOkClicked(object sender, EventArgs e)
        {
            try
            {
                if (checkCreateBackup.Active)
                {
                    if (ExecuteBackup())
                    {
                        return;
                    }
                }

                logger.Info("Обновляем базу данных до версии {0}", StringWorks.VersionToShortString(updateHop.Destanation));
                logger.Info("Проверяем все ли микро обновления установленны.");
                ExecuteMicroUpdates();

                logger.Info("Устанавливаем основное обновление.");
                RunOneUpdate(updateHop, String.Format("Обновление базы данных до версии {0}",
                                                      StringWorks.VersionToShortString(updateHop.Destanation)
                                                      ));

                if (MainSupport.BaseParameters.All.ContainsKey("micro_updates"))
                {
                    MainSupport.BaseParameters.RemoveParameter(QSMain.ConnectionDB,
                                                               "micro_updates");
                }

                MainSupport.LoadBaseParameters();

                logger.Info("Доустанавливаем микро обновления.");
                ExecuteMicroUpdates();

                progressbarTotal.Adjustment.Value = progressbarTotal.Adjustment.Upper;
                logger.Info("Обновление до версии {0}, завершено.", StringWorks.VersionToShortString(updateHop.Destanation));
                Success = true;
                Respond(Gtk.ResponseType.Ok);
            }
            catch (Exception ex)
            {
                QSMain.ErrorMessageWithLog("Ошибка при обновлении базы..", logger, ex);
                buttonOk.Sensitive = false;
                return;
            }
        }
Example #11
0
        private int FillCleanItemsOperation(IDeleteInfo currentDeletion, Operation parentOperation, TreeIter parentIter, EntityDTO masterEntity, ref int totalCount)
        {
            int clearCount = 0;

            foreach (var cleanDepend in currentDeletion.ClearItems)
            {
                int groupCount     = 0;
                var childClassInfo = cleanDepend.GetClassInfo();
                if (childClassInfo == null)
                {
                    throw new InvalidOperationException(String.Format("Зависимость очистки у класса {0} ссылается на класс {1} для которого нет описания.", currentDeletion.ObjectClass, cleanDepend.ObjectClass));
                }

                var childList = childClassInfo.GetDependEntities(this, cleanDepend, masterEntity);

                if (childList.Count == 0)
                {
                    continue;
                }

                TreeIter GroupIter = ObjectsTreeStore.AppendNode(parentIter);

                var cleanOper = childClassInfo.CreateClearOperation(masterEntity, cleanDepend, childList);

                parentOperation.ChildBeforeOperations.Add(cleanOper);

                foreach (var item in childList)
                {
                    ObjectsTreeStore.AppendValues(GroupIter, item.Title);
                    groupCount++;
                    totalCount++;
                    clearCount++;
                }

                CheckDlg.AddLinksCount(groupCount);
                if (CheckDlg.IsCanceled)
                {
                    return(0);
                }

                ObjectsTreeStore.SetValues(GroupIter, String.Format("{0}({1})", StringWorks.StringToTitleCase(childClassInfo.ObjectsName), groupCount));
            }
            return(clearCount);
        }
Example #12
0
        public void IsOnlyLettersAndOrDigits()
        {
            try

            {
                StringWorks sw     = new StringWorks();
                Boolean     retVal = sw.IsOnlyLettersAndOrDigits("a0Bc9DeF7gH");

                Assert.IsTrue(retVal);

                retVal = sw.IsOnlyLettersAndOrDigits("ABC 123*D9");

                Assert.IsFalse(retVal);
            }
            catch (Exception exUnhandled)
            {
                Assert.Fail(exUnhandled.Message);
            }
        } // END public void IsOnlyLettersTest()
        void MenuitemSelectFromClient_Activated(object sender, EventArgs e)
        {
            equipmentToSetSerial = ytreeEquipment.GetSelectedObject <ReceptionEquipmentItemNode>();
            var filter = new ClientBalanceFilter(UoW);

            filter.SetAndRefilterAtOnce(
                x => x.RestrictCounterparty = equipmentToSetSerial.ServiceClaim.Counterparty,
                x => x.RestrictNomenclature = x.UoW.GetById <Nomenclature>(equipmentToSetSerial.NomenclatureId)
                );
            var selectFromClientDlg = new PermissionControlledRepresentationJournal(new Vodovoz.ViewModel.ClientEquipmentBalanceVM(filter));

            selectFromClientDlg.CustomTabName(
                string.Format(
                    "Оборудование у {0}",
                    StringWorks.EllipsizeEnd(equipmentToSetSerial.ServiceClaim.Counterparty.Name, 50)
                    )
                );
            selectFromClientDlg.ObjectSelected += SelectFromClientDlg_ObjectSelected;
            MyTab.TabParent.AddSlaveTab(MyTab, selectFromClientDlg);
        }
Example #14
0
        public static string GetCollectionName(Expression <Func <TDoc, IList <TRow> > > sourceProperty)
        {
            var           propertyChain = PropertyChainFromExp.Get(sourceProperty);
            List <string> names         = new List <string>();

            foreach (var prop in propertyChain)
            {
                var    attrs = (DisplayAttribute[])prop.GetCustomAttributes(typeof(DisplayAttribute), false);
                string namepart;
                if ((attrs != null) && (attrs.Length > 0))
                {
                    namepart = StringWorks.StringToPascalCase(attrs[0].GetName());
                }
                else
                {
                    namepart = prop.Name;
                }
                names.Add(namepart);
            }
            var name = String.Join(".", names);

            return(name);
        }
Example #15
0
        public static void CheckMicroUpdates()
        {
            Version currentDB = new Version();

            if (MainSupport.BaseParameters.All.ContainsKey("micro_updates"))
            {
                currentDB = Version.Parse(MainSupport.BaseParameters.All["micro_updates"]);
            }

            var dbMainVersion = Version.Parse(MainSupport.BaseParameters.Version);

            if (currentDB < dbMainVersion)
            {
                currentDB = dbMainVersion;
            }

            logger.Info("Проверяем микро обновления базы(текущая версия:{0})", StringWorks.VersionToShortString(currentDB));
            var beforeUpdates = currentDB;

            while (microUpdates.Exists(u => u.Source == currentDB))
            {
                var update = microUpdates.Find(u => u.Source == currentDB);

                if (!QSMain.User.Admin)
                {
                    NotAdminErrorAndExit(true, update.Source, update.Destanation);
                }

                logger.Info("Обновляемся до {0}", StringWorks.VersionToShortString(update.Destanation));
                var trans = QSMain.ConnectionDB.BeginTransaction();
                try
                {
                    string sql;
                    using (Stream stream = update.Assembly.GetManifestResourceStream(update.Resource))
                    {
                        if (stream == null)
                        {
                            throw new InvalidOperationException(String.Format("Ресурс {0} указанный в обновлениях не найден.", update.Resource));
                        }
                        StreamReader reader = new StreamReader(stream);
                        sql = reader.ReadToEnd();
                    }

                    var cmd = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;
                    cmd.Transaction = trans;
                    cmd.ExecuteNonQuery();
                    trans.Commit();
                    currentDB = update.Destanation;
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    QSMain.ErrorMessageWithLog("Ошибка при обновлении базы..", logger, ex);
                    return;
                }
            }

            if (currentDB != beforeUpdates)
            {
                MainSupport.BaseParameters.UpdateParameter(
                    QSMain.ConnectionDB,
                    "micro_updates",
                    StringWorks.VersionToShortString(currentDB)
                    );

                MessageDialogWorks.RunInfoDialog("Выполнено микро обновление базы {0} -> {1}.", StringWorks.VersionToShortString(beforeUpdates), StringWorks.VersionToShortString(currentDB));
            }
        }
Example #16
0
        /// <summary>
        /// Проверяем версию базы. Можно запускать неоднократно, вернет true если есть сообщение.
        /// </summary>
        public static bool Check()
        {
            ResultFlags = CheckBaseResult.Ok;

            if (string.IsNullOrWhiteSpace(MainSupport.BaseParameters.Product))
            {
                ResultFlags |= CheckBaseResult.IncorrectProduct;
                TextMessage  = "Название продукта в базе данных не указано.";
                return(true);
            }

            if (MainSupport.BaseParameters.Product != MainSupport.ProjectVerion.Product)
            {
                ResultFlags |= CheckBaseResult.IncorrectProduct;
                TextMessage  = "База данных от другого продукта.";
                logger.Fatal("База данных от другого продукта. (База: {0} Программа: {1})",
                             MainSupport.BaseParameters.Product,
                             MainSupport.ProjectVerion.Product
                             );
                return(true);
            }

            Version baseVersion;

            if (String.IsNullOrWhiteSpace(MainSupport.BaseParameters.Version) ||
                !Version.TryParse(MainSupport.BaseParameters.Version, out baseVersion))
            {
                ResultFlags |= CheckBaseResult.IncorrectVersion;
                TextMessage  = "Версия базы данных не определена.";
                return(true);
            }

            if (MainSupport.ProjectVerion.Version.Major != baseVersion.Major || MainSupport.ProjectVerion.Version.Minor != baseVersion.Minor)
            {
                TextMessage  = "Версия продукта не совпадает с версией базы данных.\n";
                TextMessage += String.Format("Версия продукта: {0}", StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version));
                TextMessage += "\nВерсия базы данных: " + MainSupport.BaseParameters.Version;

                if (MainSupport.ProjectVerion.Version > baseVersion)
                {
                    ResultFlags |= CheckBaseResult.BaseVersionLess;
                }
                else
                {
                    ResultFlags |= CheckBaseResult.BaseVersionGreater;
                }
                return(true);
            }

            if (String.IsNullOrWhiteSpace(MainSupport.BaseParameters.Edition))
            {
                TextMessage  = "Редакция базы не указана!";
                ResultFlags |= CheckBaseResult.UnsupportEdition;
                return(true);
            }

            if (!MainSupport.ProjectVerion.AllowEdition.Contains(MainSupport.BaseParameters.Edition))
            {
                ResultFlags |= CheckBaseResult.UnsupportEdition;
                TextMessage  = "Редакция базы данных не поддерживается.\n";
                TextMessage += "Редакция продукта: " + MainSupport.ProjectVerion.Edition + "\nРедакция базы данных: " + MainSupport.BaseParameters.Edition;
                return(true);
            }

            return(false);
        }
Example #17
0
        private int FillDeleteItemsOperation(IDeleteInfo currentDeletion, Operation parentOperation, TreeIter parentIter, EntityDTO masterEntity, ref int totalCount)
        {
            int deleteCount = 0;

            foreach (var delDepend in currentDeletion.DeleteItems)
            {
                int GroupCount     = 0;
                var childClassInfo = delDepend.GetClassInfo();
                if (childClassInfo == null)
                {
                    throw new InvalidOperationException(String.Format("Зависимость удаления у класса(таблицы) {0}({1}) ссылается на класс(таблицу) {2}({3}) для которого нет описания.",
                                                                      currentDeletion.ObjectClass,
                                                                      currentDeletion is DeleteInfo ? (currentDeletion as DeleteInfo).TableName : String.Empty,
                                                                      delDepend.ObjectClass,
                                                                      delDepend.TableName));
                }

                var childList = childClassInfo.GetDependEntities(this, delDepend, masterEntity).ToList();

                if (childList.Count == 0)
                {
                    continue;
                }

                foreach (var chk in DeletedItems.Where(x => x.ItemClass == childClassInfo.ObjectClass))
                {
                    childList.RemoveAll(e => e.Id == chk.ItemId);
                }

                if (childList.Count == 0)
                {
                    continue;
                }

                TreeIter GroupIter = ObjectsTreeStore.AppendNode(parentIter);

                var delOper = childClassInfo.CreateDeleteOperation(masterEntity, delDepend, childList);
                if (delDepend.IsCascade)
                {
                    parentOperation.ChildAfterOperations.Add(delOper);
                }
                else
                {
                    parentOperation.ChildBeforeOperations.Add(delOper);
                }

                foreach (var row in childList)
                {
                    TreeIter ItemIter = ObjectsTreeStore.AppendValues(GroupIter, row.Title);
                    DeletedItems.Add(new DeletedItem {
                        ItemClass = childClassInfo.ObjectClass,
                        ItemId    = row.Id,
                        Title     = row.Title
                    });

                    totalCount += FillChildOperation(childClassInfo, delOper, ItemIter, row);

                    if (CheckDlg.IsCanceled)
                    {
                        return(0);
                    }

                    GroupCount++;
                    totalCount++;
                    deleteCount++;
                }

                CheckDlg.AddLinksCount(GroupCount);

                ObjectsTreeStore.SetValues(GroupIter, String.Format("{0}({1})", StringWorks.StringToTitleCase(childClassInfo.ObjectsName), GroupCount));
            }
            return(deleteCount);
        }
Example #18
0
        static void ShowDialog(bool updateRequired)
        {
            string message  = String.Empty;
            string tempPath = Path.Combine(Path.GetTempPath(),
                                           String.Format(@"QSInstaller-{0}.exe", Guid.NewGuid().ToString().Substring(0, 8)));

            bool        loadingComplete = false;
            ProgressBar updateProgress;

            updateProgress      = new ProgressBar();
            updateProgress.Text = "Новая версия скачивается, подождите...";
            VBox vbox = new VBox();

            vbox.PackStart(updateProgress, true, true, 0);
            WebClient webClient = new WebClient();

            webClient.DownloadFileCompleted += (sender, e) => Application.Invoke(delegate {
                loadingComplete = true;
                var isMapped    = updateWindow.IsMapped;
                updateWindow.Destroy();
                if (isMapped && e.Error == null && !e.Cancelled)
                {
                    logger.Info("Скачивание обновления завершено. Запускаем установку...");
                    Process File            = new Process();
                    File.StartInfo.FileName = tempPath;
                    try {
                        File.Start();
                        Environment.Exit(0);
                    } catch (Exception ex) {
                        ShowErrorDialog("Не удалось запустить скачанный файл.");
                        logger.Error(ex, "Не удалось запустить скачанный установщик.");
                    }
                }
                else if (e.Error != null)
                {
                    ShowErrorDialog("Не удалось скачать файл.");
                }
                logger.Error(e.Error, "Не удалось скачать файл обновления.");
            });
            webClient.DownloadProgressChanged += (sender, e) => Application.Invoke(delegate {
                updateProgress.Fraction = e.ProgressPercentage / 100.0;
            });
            updateWindow.SetSizeRequest(300, 25);
            updateWindow.Resizable = false;
            updateWindow.SetPosition(WindowPosition.Center);
            if (updateRequired)
            {
                updateWindow.DeleteEvent += delegate {
                    Environment.Exit(0);
                }
            }
            ;
            updateWindow.Add(vbox);

            if (updateResult.HasUpdate && !updateRequired)
            {
                message = String.Format("<b>Доступна новая версия программы!</b>\n" +
                                        "Доступная версия: {0} (У вас установлена версия {1})\n" +
                                        "Вы хотите скачать и установить новую версию?\n\n" +
                                        (updateResult.UpdateDescription != String.Empty ? "<b>Информация об обновлении:</b>\n{2}" : "{2}"),
                                        StringWorks.VersionToShortString(updateResult.NewVersion),
                                        StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version),
                                        updateResult.UpdateDescription);
            }
            else if (updateResult.HasUpdate && updateRequired)
            {
                message = String.Format("<b>Доступна новая версия программы!</b>\n" +
                                        "Доступная версия: {0} (У вас установлена версия {1})\n" +
                                        "<b>Для продолжения работы вам необходимо установить данное обновление.</b>\n\n" +
                                        (updateResult.UpdateDescription != String.Empty ? "<b>Информация об обновлении:</b>\n{2}" : "{2}"),
                                        StringWorks.VersionToShortString(updateResult.NewVersion),
                                        StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version),
                                        updateResult.UpdateDescription);
            }
            else if (!updateResult.HasUpdate && !updateRequired)
            {
                message = String.Format("<b>Ваша версия программного продукта: {0}</b>\n\n" +
                                        "На данный момент это самая последняя версия.\n" +
                                        "Обновление не требуется.",
                                        StringWorks.VersionToShortString(MainSupport.ProjectVerion.Version));
            }
            else if (!updateResult.HasUpdate && updateRequired)
            {
                ShowErrorDialog("Необходимое обновление программы не найдено.\n" + CheckBaseVersion.TextMessage);
                Environment.Exit(1);
            }

            try {
                UpdaterDialog updaterDialog = new UpdaterDialog(message, updateResult, updateRequired);
                ResponseType  result        = (ResponseType)updaterDialog.Run();
                updaterDialog.Destroy();

                if (result == ResponseType.Ok)
                {
                    updateWindow.ShowAll();
                    logger.Info("Скачивание обновления началось.");
                    logger.Debug("Скачиваем из {0} в {1}", updateResult.FileLink, tempPath);

                    webClient.DownloadFileAsync(new Uri(updateResult.FileLink), tempPath);
                    // Ждем окончания загрузки файла не возвращая управление, иначе в процессе скачивания продолжется работа, а это не надо во всех случаях
                    while (!loadingComplete)
                    {
                        if (Gtk.Application.EventsPending())
                        {
                            Gtk.Application.RunIteration();
                        }
                        else
                        {
                            Thread.Sleep(50);
                        }
                    }
                }
                else if (updateRequired)
                {
                    Environment.Exit(0);
                }
                else if (updateResult.HasUpdate)
                {
                    ConfigFileUpdater(result == ResponseType.Cancel || result == ResponseType.DeleteEvent);
                }
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка доступа к серверу обновления.");
                ShowErrorDialog("Извините, сервер обновления не работает.");
            }
        }
Example #19
0
        public static void TryUpdate()
        {
            logger.Debug(System.Reflection.Assembly.GetCallingAssembly().FullName);
            Version currentDB  = Version.Parse(MainSupport.BaseParameters.Version);
            var     appVersion = MainSupport.ProjectVerion.Version;

            if (currentDB.Major == appVersion.Major && currentDB.Minor == appVersion.Minor)
            {
                return;
            }

            var update = updates.Find(u => u.Source == currentDB);

            if (update != null)
            {
                if (!QSMain.User.Admin)
                {
                    NotAdminErrorAndExit(false, update.Source, update.Destanation);
                }

                var dlg = new DBUpdateProcess(update);
                dlg.Show();
                dlg.Run();
                if (!dlg.Success)
                {
                    Environment.Exit(1);
                }
                dlg.Destroy();

                MainSupport.LoadBaseParameters();
                if (appVersion.Major != update.Destanation.Major && appVersion.Minor != update.Destanation.Minor)
                {
                    TryUpdate();
                }
            }
            else
            {
                logger.Error("Версия базы не соответствует программе, но обновление не найдено");
                ShowErrorAndExit(CheckBaseVersion.TextMessage +
                                 String.Format("\nОбновление базы для версии {0} не поддерживается.", StringWorks.VersionToShortString(currentDB)));
            }
        }