示例#1
0
        private static void Main(string[] args)
        {
            try {
                Task.Run(() => {
                    //Cache deserializers in another thread
                    new XmlSerializer(typeof(Configuration));
                    new XmlSerializer(typeof(DebugWorkspace));
                });

                if (Type.GetType("Mono.Runtime") != null)
                {
                    Program.IsMono = true;
                }

                Program.OriginalFolder = Directory.GetCurrentDirectory();

                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                Application.ThreadException += Application_ThreadException;
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

                //Enable TLS 1.0/1.1/1.2 support
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

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

                if (ConfigManager.GetConfigFile() == null)
                {
                    //Show config wizard
                    ResourceHelper.LoadResources(Language.English);
                    Application.Run(new frmConfigWizard());

                    if (ConfigManager.GetConfigFile() == null)
                    {
                        Application.Exit();
                        return;
                    }
                }
                Directory.CreateDirectory(ConfigManager.HomeFolder);
                Directory.SetCurrentDirectory(ConfigManager.HomeFolder);
                try {
                    if (!ResourceExtractor.ExtractResources())
                    {
                        return;
                    }
                } catch (FileNotFoundException e) {
                    string message = "The Microsoft .NET Framework 4.5 could not be found. Please download and install the latest version of the .NET Framework from Microsoft's website and try again.";
                    switch (ResourceHelper.GetCurrentLanguage())
                    {
                    case Language.French: message = "Le .NET Framework 4.5 de Microsoft n'a pas été trouvé. Veuillez télécharger la plus récente version du .NET Framework à partir du site de Microsoft et essayer à nouveau."; break;

                    case Language.Japanese: message = "Microsoft .NET Framework 4.5はインストールされていないため、Mesenは起動できません。Microsoft .NET Frameworkの最新版をMicrosoftのサイトからダウンロードして、インストールしてください。"; break;

                    case Language.Russian: message = "Microsoft .NET Framework 4.5 не найден. Пожалуйста загрузите и установите последнюю версию .NET Framework с сайта Microsoft и попробуйте снова."; break;

                    case Language.Spanish: message = "Microsoft .NET Framework 4.5 no se ha encontrado. Por favor, descargue la versión más reciente de .NET Framework desde el sitio de Microsoft y vuelva a intentarlo."; break;

                    case Language.Ukrainian: message = "Microsoft .NET Framework 4.5 не знайдений. Будь ласка завантажте і встановіть останню версію .NET Framework з сайту Microsoft і спробуйте знову."; break;

                    case Language.Portuguese: message = "Microsoft .NET Framework 4.5 não foi encontrado. Por favor, baixe a versão mais recente de .NET Framework do site da Microsoft e tente novamente."; break;

                    case Language.Chinese: message = "找不到 Microsoft .NET Framework 4.5,请访问 Microsoft 官网下载安装之后再试。"; break;
                    }
                    MessageBox.Show(message + Environment.NewLine + Environment.NewLine + e.ToString(), "Mesen-S", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                } catch (Exception e) {
                    string message = "An unexpected error has occurred.\n\nError details:\n{0}";
                    switch (ResourceHelper.GetCurrentLanguage())
                    {
                    case Language.French: message = "Une erreur inattendue s'est produite.\n\nDétails de l'erreur :\n{0}"; break;

                    case Language.Japanese: message = "予期しないエラーが発生しました。\n\nエラーの詳細:\n{0}"; break;

                    case Language.Russian: message = "Неизвестная ошибка.

Подробно:
{0}"; break;

                    case Language.Spanish: message = "Se ha producido un error inesperado.

Detalles del error:
{0}"; break;

                    case Language.Ukrainian: message = "Невідома помилка.

Детально:
{0}"; break;

                    case Language.Portuguese: message = "Houve um erro inesperado.

Detalhes do erro:
{0}"; break;

                    case Language.Chinese: message = "发生意外错误。\n\n详情:\n{0}"; break;
                    }
                    MessageBox.Show(string.Format(message, e.ToString()), "Mesen-S", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (!RuntimeChecker.TestDll())
                {
                    return;
                }

                using (SingleInstance singleInstance = new SingleInstance()) {
                    if (singleInstance.FirstInstance || !ConfigManager.Config.Preferences.SingleInstance)
                    {
                        frmMain frmMain = new frmMain(args);

                        singleInstance.ListenForArgumentsFromSuccessiveInstances();
                        singleInstance.ArgumentsReceived += (object sender, ArgumentsReceivedEventArgs e) => {
                            if (frmMain.IsHandleCreated)
                            {
                                frmMain.BeginInvoke((MethodInvoker)(() => {
                                    new CommandLineHelper(e.Args).LoadGameFromCommandLine();
                                }));
                            }
                        };

                        Application.Run(frmMain);
                    }
                    else
                    {
                        if (singleInstance.PassArgumentsToFirstInstance(args))
                        {
                            Process current = Process.GetCurrentProcess();
                            foreach (Process process in Process.GetProcessesByName(current.ProcessName))
                            {
                                if (process.Id != current.Id)
                                {
                                    Program.SetForegroundWindow(process.MainWindowHandle);
                                    break;
                                }
                            }
                        }
                        else
                        {
                            Application.Run(new frmMain(args));
                        }
                    }
                }
            } catch (Exception e) {
                MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, e.ToString());
            }
        }
示例#2
0
文件: Program.cs 项目: seem-sky/Mesen
        private static void Main(string[] args)
        {
            try {
                AppDomain.CurrentDomain.AssemblyResolve += LoadAssemblies;
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                Application.ThreadException += Application_ThreadException;
                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

                Directory.CreateDirectory(ConfigManager.HomeFolder);
                Directory.SetCurrentDirectory(ConfigManager.HomeFolder);
                try {
                    ResourceHelper.LoadResources(ConfigManager.Config.PreferenceInfo.DisplayLanguage);
                    ResourceManager.ExtractResources();
                } catch (FileNotFoundException) {
                    string message = "The Microsoft .NET Framework 4.5 could not be found. Please download and install the latest version of the .NET Framework from Microsoft's website and try again.";
                    switch (ResourceHelper.GetCurrentLanguage())
                    {
                    case Language.French: message = "Le .NET Framework 4.5 de Microsoft n'a pas été trouvé. Veuillez télécharger la plus récente version du .NET Framework à partir du site de Microsoft et essayer à nouveau."; break;

                    case Language.Japanese: message = "Microsoft .NET Framework 4.5はインストールされていないため、Mesenは起動できません。Microsoft .NET Frameworkの最新版をMicrosoftのサイトからダウンロードして、インストールしてください。"; break;

                    case Language.Russian: message = "Microsoft .NET Framework 4.5 не найден. Пожалуйста загрузите и установите последнюю версию .NET Framework с сайта Microsoft и попробуйте снова."; break;

                    case Language.Spanish: message = "Microsoft .NET Framework 4.5 no se ha encontrado. Por favor, descargue la versión más reciente de .NET Framework desde el sitio de Microsoft y vuelva a intentarlo."; break;

                    case Language.Ukrainian: message = "Microsoft .NET Framework 4.5 не знайдений. Будь ласка завантажте і встановіть останню версію .NET Framework з сайту Microsoft і спробуйте знову."; break;
                    }
                    MessageBox.Show(message, "Mesen", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                } catch (Exception e) {
                    string message = "An unexpected error has occurred.\n\nError details:\n{0}";
                    switch (ResourceHelper.GetCurrentLanguage())
                    {
                    case Language.French: message = "Une erreur inattendue s'est produite.\n\nDétails de l'erreur :\n{0}"; break;

                    case Language.Japanese: message = "予期しないエラーが発生しました。\n\nエラーの詳細:\n{0}"; break;

                    case Language.Russian: message = "Неизвестная ошибка.

Подробно:
{0}"; break;

                    case Language.Spanish: message = "Se ha producido un error inesperado.

Detalles del error:
{0}"; break;

                    case Language.Ukrainian: message = "Невідома помилка.

Детально:
{0}"; break;
                    }
                    MessageBox.Show(string.Format(message, e.ToString()), "Mesen", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (!RuntimeChecker.TestDll())
                {
                    return;
                }

                ResourceHelper.UpdateEmuLanguage();

                Guid guid = new Guid("{A46606B7-2D1C-4CC5-A52F-43BCAF094AED}");
                using (SingleInstance singleInstance = new SingleInstance(guid)) {
                    if (singleInstance.FirstInstance || !Config.ConfigManager.Config.PreferenceInfo.SingleInstance)
                    {
                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);

                        Mesen.GUI.Forms.frmMain frmMain = new Mesen.GUI.Forms.frmMain(args);

                        if (Config.ConfigManager.Config.PreferenceInfo.SingleInstance)
                        {
                            singleInstance.ListenForArgumentsFromSuccessiveInstances();
                            singleInstance.ArgumentsReceived += (object sender, ArgumentsReceivedEventArgs e) => {
                                frmMain.BeginInvoke((MethodInvoker)(() => {
                                    frmMain.ProcessCommandLineArguments(e.Args, false);
                                }));
                            };
                        }

                        Application.Run(frmMain);
                    }
                    else
                    {
                        if (singleInstance.PassArgumentsToFirstInstance(args))
                        {
                            Process current = Process.GetCurrentProcess();
                            foreach (Process process in Process.GetProcessesByName(current.ProcessName))
                            {
                                if (process.Id != current.Id)
                                {
                                    Program.SetForegroundWindow(process.MainWindowHandle);
                                    break;
                                }
                            }
                        }
                        else
                        {
                            Application.EnableVisualStyles();
                            Application.SetCompatibleTextRenderingDefault(false);
                            Application.Run(new Mesen.GUI.Forms.frmMain(args));
                        }
                    }
                }
            } catch (Exception e) {
                MesenMsgBox.Show("UnexpectedError", MessageBoxButtons.OK, MessageBoxIcon.Error, e.ToString());
            }
        }