Mutex operator for add & control single instance state
Exemplo n.º 1
0
        private static void Main(string[] args)
        {
            #region SingleInstance
            if (!SingleInstance.Start())
            {
                SingleInstance.ShowFirstInstance();
                return;
            }
            #endregion

            foreach (var arg in args)
            {
                if (arg.Equals("seed"))
                {
                    isSeed = true;
                }
                if (arg.Equals("template"))
                {
                    using (StreamWriter file = new StreamWriter(
                               Path.Combine(Directories.LanguagesFolderName, "Strings.template.txt"), append: false, encoding: Encoding.UTF8))
                    {
                        foreach (var item in LanguageManager.EnumerateStringResources(typeof(StringResources)))
                        {
                            file.WriteLine(Environment.NewLine + ";" + item.Description + Environment.NewLine + item.Id + "=");
                        }
                    }
                    return;
                }
            }

            bool cmdLineMode = false;
            LanguageManager.LoadTranslation(new CultureInfo(Settings.Default.UsersLanguage));

            Thread.CurrentThread.CurrentCulture   = LanguageManager.CurrentCulture;
            Thread.CurrentThread.CurrentUICulture = LanguageManager.CurrentCulture;

            try
            {
                // Splash screen
                SplashScreenManager.ShowForm(typeof(AppSplashScreen), true, false);

                // Database
                ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["PrismDatabase"];

                HibernateUtil.Initialize(settings.ConnectionString, false);

                // Ninject
                Kernel = new StandardKernel(new PrizmModule());

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

                // Hide splash screen
                SplashScreenManager.CloseForm(false);

                //Event before closing program
                AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);

                //Permissions setup
                CreatePermissions();

                while (!CreateProject())
                {
                }

                //Login
                string      failMessage = String.Empty;
                LoginResult loginResult = LoginResult.None;
                while (loginResult != LoginResult.LoggedIn)
                {
                    loginResult = Login(ref failMessage);
                    switch (loginResult)
                    {
                    case LoginResult.Failed:
                    case LoginResult.FailedUserInactive:
                        log.Warn(string.Format("Failed to login for the reason: {0}", failMessage));
                        MessageBox.Show(failMessage,
                                        Program.LanguageManager.GetString(StringResources.MainWindowHeader_Title),
                                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                    }
                }

                mainForm = new PrizmApplicationXtraForm();
                Application.Run(mainForm);
            }
            catch (Exception ex)
            {
                String error = ex.ToString();
                if (cmdLineMode)
                {
                    Console.Error.WriteLine(error);
                }
                else
                {
                    MessageBox.Show(error);
                }
                log.Fatal(error);
            }
            finally
            {
                // Hide splash screen
                SplashScreenManager.CloseForm(false);
            }
        }