示例#1
0
 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";
 }
示例#2
0
        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();
            }
        }