diff options
Diffstat (limited to 'ShiftOS_TheReturn/CrashHandler.cs')
| -rw-r--r-- | ShiftOS_TheReturn/CrashHandler.cs | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/ShiftOS_TheReturn/CrashHandler.cs b/ShiftOS_TheReturn/CrashHandler.cs new file mode 100644 index 0000000..f49a8f3 --- /dev/null +++ b/ShiftOS_TheReturn/CrashHandler.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Reflection; +using System.Management; +using System.Windows.Forms; +using Newtonsoft.Json; +using System.Threading; +using System.IO; + +namespace ShiftOS.Engine +{ + public class GetHardwareInfo + { + public static string GetProcessorName() + { + string ProcessorName = ""; + ManagementObjectSearcher mos + = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor"); + + foreach (ManagementObject mo in mos.Get()) + ProcessorName = mo["Name"].ToString(); + + return ProcessorName; + } + public static string GetGPUName() + { + string GPUName = ""; + ManagementObjectSearcher mos + = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_VideoController"); + + foreach (ManagementObject mo in mos.Get()) + GPUName = mo["Name"].ToString(); + + return GPUName; + } + public static string GetRAMAmount() + { + var RAMAmount = ""; + ManagementObjectSearcher mos + = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PhysicalMemory"); + + foreach (ManagementObject mo in mos.Get()) + RAMAmount = mo["Capacity"].ToString(); + + RAMAmount = (RAMAmount + " B"); + + return RAMAmount; + } + } + + + public partial class CrashHandler : Form + { + public CrashHandler() + { + InitializeComponent(); + + + //Send the bug to Debugle + // or alternatively, send to [email protected] OR [email protected] + + } + + public static Exception HandledException = null; + + public static void Start(Exception e) + { + if (SaveSystem.CurrentSave != null) + { + TerminalBackend.InvokeCommand("sos.save"); //save ShiftOS to disk before killing the session + } + + //Close ALL FORMS in the current session. + while (Application.OpenForms.Count != 0) + { + Application.OpenForms[0].Dispose(); + } + + //Disconnect us from the ShiftOS multi-user domain. + ServerManager.Disconnect(); + + //Set our global exception variable, and show the exception dialog. + HandledException = e; + System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); + System.IO.FileInfo fileInfo = new System.IO.FileInfo(assembly.Location); + DateTime lastModified = fileInfo.LastWriteTime; + + string rtbcrash_Text = $@" === ShiftOS has crashed === + +Basic Information For User: +--------------------------------- + +When: {DateTime.Now.ToString()} +Why: {HandledException.Message} +What: {HandledException.GetType().Name} + +We, at the ShiftOS Development Team, apologise for your game crash, +we will take this bug report seriously - and it has been emailed +to the development team of ShiftOS, thank you for enjoying our game! + +Advanced Information (for experts and developers): +---------------------------------------------------- + +Host system information: +--------------------------------- + +Operating system: {Environment.OSVersion.Platform.ToString()} +Version: {Environment.OSVersion.VersionString} +Is 64-bit: {Environment.Is64BitOperatingSystem} +ShiftOS exec path: {Application.ExecutablePath} + +Advanced Host Information: +--------------------------------- + +CPU Name: {GetHardwareInfo.GetProcessorName()} +Physical RAM Installed: {GetHardwareInfo.GetRAMAmount()} +GPU Name: {GetHardwareInfo.GetGPUName()} + +ShiftOS basic information: +--------------------------------- + +ShiftOS Version: {Assembly.GetExecutingAssembly().GetName().Version} +ShiftOS Date: {lastModified.ToString()} + +ShiftOS environment information: +--------------------------------- + +Is Save loaded: {(SaveSystem.CurrentSave != null)} +Paths loaded in system: {JsonConvert.SerializeObject(Paths.GetAll())} + + +Crash: {HandledException.GetType().Name} +-------------------------------------------- + +Exception message: {HandledException.Message} +HResult (this is technical): {HandledException.HResult} +Has inner exception: {(HandledException.InnerException != null)} +Stack trace: +{HandledException.StackTrace}"; + + if (HandledException.InnerException != null) + { + var i = HandledException.InnerException; + rtbcrash_Text += $@" + +Inner: {i.GetType().Name} +-------------------------------------------- + +Exception message: {i.Message} +HResult (this is technical): {i.HResult} +Stack trace: +{i.StackTrace}"; + + } + + File.WriteAllText("crash.txt", rtbcrash_Text); + var result = MessageBox.Show(caption: "ShiftOS - Fatal error", text: "ShiftOS has encountered a fatal error and has been shut down. Info about the error has been saved to a file called crash.txt in the same folder as the active executable. Would you like to try and recover the game session?", buttons: MessageBoxButtons.YesNo); + if(result == DialogResult.Yes) + { + Application.Restart(); + } + } + + private void button1_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void btnjump_Click(object sender, EventArgs e) + { + this.Close(); + Application.Restart(); + } + } +} |
