Пример #1
0
        ///<param name="db">L'applicazione che userà main.dll avrà la sua variabile db e non userà DBNs.db, poichè DBNs.db è di tipo base e avrei difficoltà con l'intellisense</param>
        public static bool Initialize(SharedCodeWithApp codiceApp, DBBase db, Type classeDb, string logTestoUteAvv = "", string logTestoUteErr = "")
        {
            //***********************************************************************************************************************************************************************************************************************
            //****************ATTENZIONE: Inserire il codice: <runtime><legacyUnhandledExceptionPolicy enabled = "1" /></runtime>  nell'App.config, vedere Eccezioni.vb per i dettagli**********************************************
            //***********************************************************************************************************************************************************************************************************************
            App.Config = new Apps.AppConfigFile();

            mainInizializzato            = false;
            proceduraChiusuraGiàEseguita = false;

            Thread thrCheckTimeInizial = new Thread(thrCheckInitializeTime); //Non ho usato avvio download per non aspettare

            thrCheckTimeInizial.IsBackground = true;
            thrCheckTimeInizial.Start();

            if (Log.main == null)
            {
                Log.Initializes(ref Log.main, warnUserText: logTestoUteAvv, errUserText: logTestoUteErr);
            }

            AppDomain.CurrentDomain.UnhandledException       += Excep.GestoreExNonGestiteDeiThreadSecondari; //Intercetta tutte le eccezioni non gestite dei thread secondari
            Application.Current.DispatcherUnhandledException += Excep.GestoreExNonGestiteDelMainThread;      //Intercetta tutte le eccezioni non gestite del main thread (UI thread)

            if (codiceApp == null)
            {
                Log.main.Add(new Mess(LogType.ERR, "", "ricevuto codiceApp a null"));
                return(false);
            }
            App.SharedCodeApp = codiceApp;

            //if (defaultSaveLoc == null)
            //{
            //    Log.main.Add(new Mess(Tipi.ERR, "", "ricevuto defaultSaveLoc a null"));
            //    return false;
            //}

            if (App.CheckAdminPermission() == false) //Placed after App.CodiceAppCond because use it.
            {
                MessageBox.Show("The application requires administrator privileges");
                App.SharedCodeApp.ExitProcedure(saveConfigurations: false);
            }

            if (Thread.CurrentThread.ManagedThreadId != 1)
            {
                Log.main.Add(new Mess(LogType.ERR, "", "l'id del thread non è 1 richiamare Inizializza con il thread dell'UI"));
                return(false);
            }

            if (dll.inizializza() == false)
            {
                return(false);
            }

            //App.config.dbPrincipale.completa = "Provider=SQL Server Native Client 10.0;Server=Desktop\SQL2008R2Exp;Database=TestMain;Trusted_Connection=Yes;" 'oppure ";User Id=myUsername;Password = myPassword;"
            //App.config.SalvaSuFile()

            //App.MostraWndConfigApp()

            //Serial.Inizializza() 'Non so per quale stranissimo motivo, se lo inizializzo all'interno di "Serial" restituisce l'errore "System.IO.FileNotFoundException" dicendo che non...
            Serialize.jsonSett = new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.Auto
            };                                                                                              //...trova il file "Newtonsoft.Json.dll",

            //while (AppConfigFile.LoadFromFile(ref App.config, out _) == false)
            App.config = (AppConfigFile)App.config.LoadFromFile(out bool inErr);
            //while (inErr == true)
            //{
            //    App.ShowWndConfigApp();
            //    App.config = (AppConfigFile)App.config.LoadFromFile(out inErr);
            //}

            if (classeDb != null)
            {
                bool esito; List <string> listaErr;

                db                = (DBBase)Activator.CreateInstance(classeDb); //La New del db dell'applicativo viene fatta qui perchè devo avere la variabile LogNs.log inizializzata
                App.Db            = db;
                App.Db.ConnString = App.Config.MainDbConnString;

                if (db.ControlloStrutturaDB(out esito, out listaErr) == false)
                {
                    //Log.main.Add(Tipi.ERR, Log.main.errUserText, listaErr);
                    MessageBox.Show("Controllo strutta DB fallito");
                    return(false);  //qui ci va il return false perchè significa che non sono riusciuto neanche a farla la comparazione
                }

                if (esito == false)
                {
                    Log.main.Add(LogType.ERR, "", listaErr);
                    //TODO -10 open errors list window with options: try recovery or close.
                }

                thrLockedQryKiller = new Thread(DBUtil.thrCycle_LockedQryKiller); //Non ho usato avvio download per non aspettare
                thrLockedQryKiller.IsBackground = true;
                thrLockedQryKiller.Start();
            }

            App.AcquireStartupParameter(); //Deve stare prima di log.CaricaConfigAvviaThr perchè CaricaConfigAvviaThr in debugModeOn cambia comportamento


            if (Log.main.LoadConfigAndStartThread(App.Config) == false)
            {
                return(false);                                                        //deve stare dopo l'inizializzazione del DB e del App.config poichè normalmente caricherà le impostazioni da li
            }
            Log.main.ShowMessageWindow();

            if (Zip.inizializza() == false)
            {
                return(false);
            }

            App.Download = new Www.DownLoad("main");
            App.Upload   = new Www.UpLoad("main");

            thrAccessoRoot = new Thread(Root.ThrMostraNotificaAccessoRoot); //Non ho usato avvio download per non aspettare
            thrAccessoRoot.IsBackground = true;
            thrAccessoRoot.Start();

            Application.Current.Exit += ApplicationExit;

            mainInizializzato = true;
            //TestUpload()
            return(true);
        }