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); }
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); }