Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var ok = true;

            //var m = new System.Threading.Mutex(true, "YourNameHere", out ok);//Проверяем не запущена ли ещё одна копия программы
            if (!ok)            //Если запущена, то выдаём ошибку и закрываем программу.
            {
                MessageBox.Show("Другая копия программы уже запущена.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null)
            {
                args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
            }
            //MessageBox.Show(Environment.Version.Build.ToString());
            if (Settings.Default.FirstRun)                   //Проверяем установлен ли флаг 1-ого запуска программы в Settings-файле
            {
                var wiz = new Wizard(args);                  //Создаём форму Мастера настройки
                if (wiz.ShowDialog() == DialogResult.Cancel) //Открываем диалог работы с мастером и ждём его завершения
                {
                    return;                                  //Если диалог завершился отменой, выходим из программы
                }
                wiz.Dispose();                               //Освобождаем ресурсы диалога, т.к. он нам больше не нужен
            }
            var s = new SplashScreen("Resources/gws_landing_hero.png");

            s.Show(false, true);
            try
            {
                if (args.Length >= 1)
                {
                    if (args[0] == "active")
                    {
                        context     = new GamesEntities(Settings.Default.DefaultConStr);                    //Создаём новый контекст базы данных, используя подключение по умолчанию из файла настроек
                        CurrentBase = Settings.Default.DefaultConStr;
                    }
                    else
                    {
                        context     = new GamesEntities(args[0]);
                        CurrentBase = args[0];
                    }
                }
                else
                {
                    context     = new GamesEntities(Settings.Default.DefaultConStr);                //Создаём новый контекст базы данных, используя подключение по умолчанию из файла настроек
                    CurrentBase = Settings.Default.DefaultConStr;
                }
                //Database.SetInitializer(new MigrateDatabaseToLatestVersion<GamesEntities, Migrations.Configuration>());
                if (Settings.Default.NewBase)                        //Если стоит флаг новой базы, то
                {
                    if (File.Exists(Settings.Default.DefaultConStr)) //Проверяем существует ли файл с указанным именем.
                    {
                        try
                        {
                            File.Delete(Settings.Default.DefaultConStr);                            //Пробуем удалить файл
                        }
                        catch
                        {
                            MessageBox.Show("Не удаётся перезаписать файл! Программа перезапустится, чтобы вы могли заного выбрать файл с играми.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            //Если удалить не удаётся, выводим сообщение об ошибке
                            Settings.Default.FirstRun = true;  //Устанавливаем флаг первого запуска, чтобы пользователь мог повторно создать базу.
                            Settings.Default.Save();           //Сохраняем файл настроек
                            Application.Restart();             //Перезапускаем программу
                            return;                            //Выходим из текущего экземпляра программы
                        }
                    }
                    context.Database.Create();                    //Создаём базу данных. Данный метод создаст файл базы данных в указанном месте.
                    context.Database.ExecuteSqlCommand(string.Format("INSERT INTO GLDBVersion (ID_V, Version) VALUES (1,{0});", Settings.Default.DatabaseVersion));
                    Settings.Default.NewBase = false;
                    Settings.Default.Save();
                }
                context.Database.Connection.Open();                //Открываем соединение с базой
            }
            catch (Exception ex1)
            {            //Если соединение с базой по умолчанию не удалось установить, то выводим следующий диалог
                var DR = MessageBox.Show(string.Format("Не удаётся подключиться к базе по умолчанию ({0}). {1} Попытаться создать новую базу?\nИли нажмите \"Нет\" чтобы открыть другой файл базы данных.", Settings.Default.DefaultConStr, ex1.Message), "Ошибка открытия", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
                //Предлагаем пользователию либо создать файл базы данны, либо открыть другую базу, или вообще выйти из программы
                switch (DR)                                          //Перебираем результат диалога
                {
                case DialogResult.Yes:                               //Если пользователь нажал Да
                    if (File.Exists(Settings.Default.DefaultConStr)) //Проверяем существует ли файл с указанным именем.
                    {
                        try
                        {
                            File.Delete(Settings.Default.DefaultConStr);                                    //Пробуем удалить файл
                        }
                        catch
                        {
                            MessageBox.Show("Не удаётся перезаписать файл! Программа перезапустится, чтобы вы могли заного выбрать файл с играми.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            //Если удалить не удаётся, выводим сообщение об ошибке
                            Settings.Default.FirstRun = true;          //Устанавливаем флаг первого запуска, чтобы пользователь мог повторно создать базу.
                            Settings.Default.Save();                   //Сохраняем файл настроек
                            Application.Restart();                     //Перезапускаем программу
                            return;                                    //Выходим из текущего экземпляра программы
                        }
                    }
                    context.Database.Create();                            //Создаём базу данных
                    context.Database.ExecuteSqlCommand(string.Format("INSERT INTO GLDBVersion (ID_V, Version) VALUES (1,{0});", Settings.Default.DatabaseVersion));
                    break;

                case DialogResult.No:                        //Если пользователь нажал Нет
                    var dial = new OpenFileDialog
                    {
                        Title    = "Выберите файл базы данных",
                        FileName = "MyGames.gdb",
                        Filter   = "База игр (*.gdb)|*.gdb"
                    };                                              //Создаём диалог открытия файла
                    if (dial.ShowDialog() == DialogResult.OK)       //Показываем диалог и проверяем результат
                    {
                        context = new GamesEntities(dial.FileName); //Создаём контекст базы данных с выбранным файлом
                        try
                        {
                            context.Database.Connection.Open();                                    //Пробуем установить соединение
                            CurrentBase = dial.FileName;
                            if (MessageBox.Show("Вы хотите, чтобы эта база стала базой по умолчанию?", "База по умолчанию", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                            {
                                Settings.Default.DefaultConStr = dial.FileName;
                                Settings.Default.Save();
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(string.Format("Произошла ошибка. Свяжитесь с автором.\n{0}", ex.Message)); //Если соединение установить не удалось, показываем ошибку.
                            return;                                                                                    //Выходим из программы
                        }
                    }
                    else
                    {
                        return;                                //Если пользователь отказался выбирать базу, то выходим из программы
                    }
                    break;

                case DialogResult.Cancel:              //Если пользователь отказался создавать или открывать базу
                    return;                            //то выходим из программы
                }
            }
            try
            {
                if (!DBUpdater.checkDBVersion(context))
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(String.Format("{0}{1}", ex.Message, ex.InnerException != null ? "\n" + ex.InnerException.Message : null),
                                "Ошибка",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return;
            }
            s.Close(new TimeSpan(0, 0, 0, 0, 500));
            Application.Run(new GamesForm());            //Запускаем главную форму
            //GC.KeepAlive(m);//Нужно для проверки уже запущенной копии
        }
Exemplo n.º 2
0
        public Load()
        {
            InitializeComponent();
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                /*try
                 * {*/
                SecondBase = new GamesEntities(openFileDialog1.FileName);
                SecondBase.Database.Connection.Open();
                if (!DBUpdater.checkDBVersion(SecondBase))
                {
                    return;
                }
                List <string> MyGamesNames = new List <string>();
                foreach (var g in Program.context.Games)
                {
                    MyGamesNames.Add(g.GetFullName().ToUpper());
                }
                foreach (var g in SecondBase.Games)
                {
                    if (!MyGamesNames.Contains(g.GetFullName().ToUpper()))
                    {
                        GamesToAdd.Add(g);
                    }
                }
                GamesToAdd = GamesToAdd.OrderBy(g => g.Name).ToList();
                TreeNode TN, TN1;
                foreach (var g in GamesToAdd)
                {
                    if (g.Name == "Rebellion")
                    {
                        g.Name.ToString();
                    }
                    if (g.OriginalGame != null)
                    {
                        if (g.OriginalGame.OriginalGame != null)
                        {
                            TN = TreeNodeFinderRecursiv(win7StyleTreeView1.Nodes, g.OriginalGame.OriginalGame);
                            if (TN == null)
                            {
                                TN     = win7StyleTreeView1.Nodes.Add(g.OriginalGame.OriginalGame.Name);
                                TN.Tag = g.OriginalGame.OriginalGame;
                                if (Program.context.Games.FirstOrDefault(g1 => g1.Name == g.OriginalGame.OriginalGame.Name) != null)
                                {
                                    TN.Checked = true;
                                }
                            }
                            TN1 = TreeNodeFinderRecursiv(TN.Nodes, g.OriginalGame);
                            if (TN1 == null)
                            {
                                TN1     = TN.Nodes.Add(g.OriginalGame.Name);
                                TN1.Tag = g.OriginalGame;
                                if (Program.context.Games.FirstOrDefault(g1 => g1.Name == g.OriginalGame.Name) != null)
                                {
                                    TN1.Checked = true;
                                }
                            }
                            TN = TN1;
                        }
                        else
                        {
                            TN = TreeNodeFinderRecursiv(win7StyleTreeView1.Nodes, g.OriginalGame);
                            if (TN == null)
                            {
                                TN     = win7StyleTreeView1.Nodes.Add(g.OriginalGame.Name);
                                TN.Tag = g.OriginalGame;
                                if (Program.context.Games.FirstOrDefault(g1 => g1.Name == g.OriginalGame.Name) != null)
                                {
                                    TN.Checked = true;
                                }
                            }
                        }
                        if (TreeNodeFinderRecursiv(TN.Nodes, g) == null)
                        {
                            TN     = TN.Nodes.Add(g.Name);
                            TN.Tag = g;
                        }
                    }
                    else
                    {
                        if (TreeNodeFinderRecursiv(win7StyleTreeView1.Nodes, g) == null)
                        {
                            TN     = win7StyleTreeView1.Nodes.Add(g.Name);
                            TN.Tag = g;
                        }
                    }
                }
                GamesToAdd = new List <Games>();

                /*}
                 * catch(Exception ex)
                 * {
                 *      MessageBox.Show("Не удалось открыть файл.\n"+ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 * }*/
            }
        }