public static void HandleGlobalException(object sender, UnhandledExceptionEventArgs e)
        {
            var ex = (Exception)e.ExceptionObject;

            DumpCrashToFile(ex);
            //#if !DEBUG
            try { new Thread(() => UploadCrashDump(ex)).Start(); }
            catch { /*ignored*/ }
            //#endif

            TccMessageBox.Show("TCC",
                               "An error occured and TCC will now close. Report this issue to the developer attaching crash.log from TCC folder.",
                               MessageBoxButton.OK, MessageBoxImage.Error);

            App.ReleaseMutex();
            ProxyInterface.Instance.Disconnect();
            if (WindowManager.TrayIcon != null)
            {
                WindowManager.TrayIcon.Dispose();
            }

            try { WindowManager.Dispose(); }
            catch { /* ignored*/ }

            try
            {
                Firebase.RegisterWebhook(SettingsHolder.WebhookUrlGuildBam, false);
                Firebase.RegisterWebhook(SettingsHolder.WebhookUrlFieldBoss, false);
            }
            catch { }
            Environment.Exit(-1);
        }
Ejemplo n.º 2
0
        private static void HandleGlobalExceptionImpl(UnhandledExceptionEventArgs e)
        {
            var ex = (Exception)e.ExceptionObject;
            var js = BuildJsonDump(ex); //await App.BaseDispatcher.InvokeAsync(() => BuildJsonDump(ex));

            DumpCrashToFile(js, ex);

            switch (ex)
            {
            case COMException com when(com.HResult == 88980406 || com.Message.Contains("UCEERR_RENDERTHREADFAILURE")):
            {
                TccMessageBox.Show("TCC", SR.RenderThreadError, MessageBoxButton.OK, MessageBoxImage.Error);
                break;
            }

            case ClientVersionDetectionException cvde:
            {
                Log.F($"Failed to detect client version from file: {cvde}");
                TccMessageBox.Show(SR.CannotDetectClientVersion(StubInterface.Instance.IsStubAvailable), MessageBoxType.Error);
                break;
            }

            case Win32Exception w32ex when _excludedWin32codes.Contains(w32ex.NativeErrorCode):
            {
                Log.F(w32ex.ToString());
                TccMessageBox.Show("TCC", SR.FatalError, MessageBoxButton.OK, MessageBoxImage.Error);
                break;
            }

            default:
            {
                UploadCrashDump(js);
                TccMessageBox.Show("TCC", SR.FatalError, MessageBoxButton.OK, MessageBoxImage.Error);
                break;
            }
            }


            StubInterface.Instance.Disconnect();
            Firebase.Dispose();

            if (!(ex is DeadlockException))
            {
                // These actions require main thread to be alive
                App.ReleaseMutex();
                if (WindowManager.TrayIcon != null)
                {
                    WindowManager.TrayIcon.Dispose();
                }
                try { WindowManager.Dispose(); } catch { /* ignored*/ }
            }


            Environment.Exit(-1);
        }