public static void DumpSettings(object sender, CustomDataEventArgs e) { string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\SecureDelete"; ClearFolder(path); Minidump.WriteMinidump(Path.Combine(path, "minidump.dmp")); e.data = "Settings succesfully dumped"; }
private void WriteDump(Exception e) { string path = _dumpPath; if(path == null) { // save the dump in the temp directory path = Environment.GetEnvironmentVariable("TEMP"); path += "\\" + Assembly.GetExecutingAssembly().GetName().Name + ".txt"; } StringBuilder builder = new StringBuilder(); builder.Append(AppDomain.CurrentDomain.FriendlyName); builder.AppendLine(); // append dump File header if(_dumpHeader != null) { builder.Append(_dumpHeader); } else { builder.Append(DefaultDumpHeader); } builder.AppendLine(); builder.AppendLine(); // append date and time builder.Append("Date: "); builder.Append(DateTime.Now.ToLongDateString()); builder.Append(", "); builder.Append(DateTime.Now.ToLongTimeString()); builder.AppendLine(); builder.AppendLine(); // application info builder.Append("Application version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString()); builder.AppendLine(); builder.Append("Application path: " + Environment.CommandLine); builder.AppendLine(); builder.Append("Application working set: " + Environment.WorkingSet.ToString()); builder.AppendLine(); builder.AppendLine(); // host info builder.Append("Operating system version: " + Environment.OSVersion.ToString()); builder.AppendLine(); builder.Append("CLR version: " + Environment.Version.ToString()); if(_appendWinSATScores && WinSAT.IsAvailable) { WinSAT winSAT = new WinSAT(); if(winSAT.LoadWinSAT()) { builder.AppendLine(); builder.AppendLine(); builder.Append("WinSAT scores"); builder.AppendLine(); builder.Append("System: " + winSAT.ComputerScore.ToString()); builder.AppendLine(); builder.Append("CPU: " + winSAT.CpuScore.ToString()); builder.AppendLine(); builder.Append("Memory: " + winSAT.MemoryScore.ToString()); builder.AppendLine(); builder.Append("Graphics: " + winSAT.GraphicsScore.ToString()); builder.AppendLine(); builder.Append("Games graphics: " + winSAT.GamingGraphicsScore.ToString()); builder.AppendLine(); builder.Append("Disk: " + winSAT.DiskScore.ToString()); } } builder.AppendLine(); builder.AppendLine(); // append exception info if(e != null) { builder.Append("Exception: " + e.Message); builder.AppendLine(); builder.Append("TargerSite: " + e.TargetSite.Name); // append inner exceptions Exception inner = e.InnerException; int innerCount = 1; while(inner != null) { builder.Append('\t', innerCount); builder.Append("Exception: " + inner.Message); builder.AppendLine(); builder.Append("TargerSite: " + inner.TargetSite.Name); innerCount++; } } crashDetails = builder.ToString(); builder.AppendLine(); builder.Append("Stack trace:\r\n" + e.StackTrace); if(OnWriteDump != null) { CustomDataEventArgs args = new CustomDataEventArgs(); OnWriteDump(this, args); // append data if(args.data != null && args.data.Length > 0) { builder.AppendLine(); builder.AppendLine(); builder.Append(args.data); } } // loaded assembly info builder.Append("\r\n\r\nLoaded assemblies:\r\n\r\n"); activeDomain = AppDomain.CurrentDomain; foreach(Assembly a in activeDomain.GetAssemblies()) { builder.Append("Name: " + a.GetName().Name); builder.AppendLine(); try { if(a.Location != null && a.Location.Length != 0 && File.Exists(a.Location)) { builder.Append(FileVersionInfo.GetVersionInfo(a.Location).ToString()); builder.AppendLine(); } } catch(Exception ne) { Console.WriteLine(ne.Message); } } // write to File StreamWriter writer = new StreamWriter(path); _dumpPath = path; if(writer.BaseStream.CanWrite) { writer.Write(builder.ToString()); writer.Close(); } }