Example #1
0
        static void Main()
        {
            //Check is already running
            //string proc = Process.GetCurrentProcess().ProcessName;
            //Process[] processes = Process.GetProcessesByName(proc);
            //if (processes.Length > 1)
            //{
            //    MessageBox.Show("Sorry, zVirtualScenes is already running!", "zVirtualScenes");
            //    Environment.Exit(1);
            //}

            //#region Handle Embeded DLLs
            //AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
            //{
            //    String resourceName = "zVirtualScenesApplication.lib." + new AssemblyName(args.Name).Name + ".dll";

            //    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
            //    {
            //        //Assembly a = Assembly.GetExecutingAssembly();
            //        //string[] b = a.GetManifestResourceNames();
            //        Byte[] assemblyData = new Byte[stream.Length];
            //        stream.Read(assemblyData, 0, assemblyData.Length);
            //        return Assembly.Load(assemblyData);
            //    }

            //};
            //#endregion

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            //Check for VCRedist
            if (!DetectVCRedist.IsVCRedistInstalled())
            {
                MessageBox.Show(string.Format("Visual C++ Redistributable Missing!\n\n zVirtualScenes cannot open because Visual C++ Redistributable is not installed.\n\nPlease check the following path: {0}.", zvsEntityControl.GetDBPath), zvsEntityControl.zvsNameAndVersion, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //Check if DB exists
            FileInfo database = new FileInfo(zvsEntityControl.GetDBPath);
            if (!database.Exists)
            {
                FileInfo blank_database = new FileInfo(zvsEntityControl.GetBlankDBPath);
                if (!blank_database.Exists)
                {
                    MessageBox.Show(string.Format("Database Missing!\n\n zVirtualScenes cannot open because the database is missing.\n\nPlease check the following path: {0}.", zvsEntityControl.GetBlankDBPath), zvsEntityControl.zvsNameAndVersion, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                blank_database.CopyTo(zvsEntityControl.GetDBPath);
            }

            //Check DB integrity
            using (zvsEntities2 db = new zvsEntities2(zvsEntityControl.GetzvsConnectionString))
            {
                string name = db.ExecuteStoreQuery<string>(@"SELECT name FROM sqlite_master WHERE name='devices';").SingleOrDefault();
                if (string.IsNullOrEmpty(name))
                {
                    MessageBox.Show(string.Format("Database Empty!\n\n zVirtualScenes cannot open because the database is empty or corrupt.\n\nPlease check the following path: {0}.", zvsEntityControl.GetDBPath), zvsEntityControl.zvsNameAndVersion, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            //Check DB version
            String upgradeScriptPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"database\upgrade.sql");

            if (File.Exists(upgradeScriptPath))
            {
                StreamReader upgradeScriptSR = new StreamReader(upgradeScriptPath);
                String upgradeScript = upgradeScriptSR.ReadToEnd();
                upgradeScriptSR.Close();

                if (upgradeScript.ToLower().StartsWith("db_version"))
                {
                    int new_db_version;
                    int.TryParse(upgradeScript.Substring(upgradeScript.IndexOf("=") + 1, upgradeScript.IndexOf('\n') - upgradeScript.IndexOf("=")), out new_db_version);
                    try
                    {
                        using (zvsEntities2 db = new zvsEntities2(zvsEntityControl.GetzvsConnectionString))
                        {
                            string curr_db_version_str = db.ExecuteStoreQuery<string>(@"SELECT info_value FROM db_info WHERE info_name='Version';").SingleOrDefault();
                            int curr_db_version;
                            int.TryParse(curr_db_version_str, out curr_db_version);

                            if (new_db_version > curr_db_version)
                            {
                                if (new_db_version == curr_db_version + 1)
                                {
                                    upgradeScript = upgradeScript.Replace(upgradeScript.Substring(0, upgradeScript.IndexOf('\n')), "");
                                    db.ExecuteStoreCommand(upgradeScript, null);
                                    db.ExecuteStoreCommand(@"UPDATE db_info SET info_value = '" + new_db_version + "' WHERE info_name='Version';", null);
                                }
                                else
                                {
                                    if (MessageBox.Show("Your database is over 1 version old. Upgrading is not supported. Would you like to replace your database with a new blank one?", "Database too old.", MessageBoxButtons.YesNo) == DialogResult.Yes)
                                    {
                                        FileInfo blank_database = new FileInfo(zvsEntityControl.GetBlankDBPath);
                                        if (!database.Exists)
                                        {
                                            MessageBox.Show(string.Format("Database Missing!\n\n zVirtualScenes cannot open because the database is missing.\n\nPlease check the following path: {0}.", zvsEntityControl.GetBlankDBPath), zvsEntityControl.zvsNameAndVersion, MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            return;
                                        }

                                        blank_database.CopyTo(zvsEntityControl.GetDBPath);
                                    }
                                    else
                                        return;

                                }
                            }
                        }
                    }
                    catch (SQLiteException e)
                    {
                        if (MessageBox.Show("We can't auto upgrade your database. Would you like to replace your database with a new blank one?", "Database too old.", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            FileInfo blank_database = new FileInfo(zvsEntityControl.GetBlankDBPath);
                            if (!database.Exists)
                            {
                                MessageBox.Show(string.Format("Database Missing!\n\n zVirtualScenes cannot open because the database is missing.\n\nPlease check the following path: {0}.", zvsEntityControl.GetBlankDBPath), zvsEntityControl.zvsNameAndVersion, MessageBoxButtons.OK, MessageBoxIcon.Error);
                                return;
                            }

                            blank_database.CopyTo(zvsEntityControl.GetDBPath);
                        }
                        else
                            return;
                    }
                }
            }

            Application.Run(new MainForm());
        }