예제 #1
0
        //public ErrorReport(string msg, Exception ex, Config conf) : this(String.Concat("Error reading from registry: ", msg), ex, conf, null)
        public CrashReport(string msg, Exception ex, SettingsApp settings, ListView lv)
        {
#if LOG
            Log.Write(LogLevel.Info, "ErrorReporting.");
#endif

            InitializeComponent();

#if !ExtLang
            LanguageManager.Localize(this);
#endif

            if (msg == null)
            {
                labelError.Text = LanguageManager.GetString("Crash_UnknownError");//"An unknown error has occurred. WallpaperChanger cannot continue.";
            }
            else
            {
                labelError.Text = msg;
            }

            // Set picturebox to error
            this.pictureBoxErr.Image = SystemIcons.Error.ToBitmap();

            try
            {
                CaptureScreenshot captureScreenshot = new CaptureScreenshot();
                _screenShot = string.Format(@"{0}\{1} Crash Screenshot.png", Path.GetTempPath(), AssemblyHelper.AssemblyTitle);
                captureScreenshot.CaptureScreenToFile(_screenShot, ImageFormat.Png);
            }
            catch (Exception e)
            {
                Debug.Write(e.Message);
            }
            if (File.Exists(_screenShot))
            {
                pictureBoxScreenshot.ImageLocation = _screenShot;
                pictureBoxScreenshot.Show();
            }

            CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
            if (oldCulture.Parent.Name != "ru")
            {
                //Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en");
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
                // throw new Exception here => Culture is in english
                //MessageBox.Show(new FileNotFoundException().Message);
            }

            StringBuilder sb = new StringBuilder();

            if (ex != null)
            {
                sb.AppendLine(ex.Message);
            }
            sb.AppendLine();

            //programm and versions
            //sb.AppendLine(Application.ProductName);
            sb.AppendLine(AssemblyHelper.AssemblyTitle);
            //sb.AppendLine(Application.ProductVersion);
            sb.AppendLine(string.Format("Version: {0}", AssemblyHelper.AssemblyVersion));
            sb.AppendLine(AssemblyHelper.AssemblyBuildDate);

            Process proc = Process.GetCurrentProcess();
            // dates and time
            sb.AppendLine(string.Format("Current Date/Time: {0}", DateTime.Now.ToString()));
            sb.AppendLine(string.Format("Current UtcDate/Time: {0}", DateTime.UtcNow.ToString()));
            sb.AppendLine(string.Format("Process Date/Time: {0}", proc.StartTime.ToString()));
            //sb.AppendLine(string.Format("Build Date: {0}", Properties.Settings.Default.strBuildTime));
            // os info
            sb.AppendLine(string.Format("OS: {0}", Environment.OSVersion.VersionString));
            sb.AppendLine(string.Format("OS info: {0}", getOSInfo()));
            sb.AppendLine(string.Format(".NET Framework (CLR): {0}", Environment.Version.ToString()));
            sb.AppendLine(string.Format("Language: {0}", Application.CurrentCulture.ToString()));
            sb.AppendLine(string.Format("CurrentCulture: {0}", System.Threading.Thread.CurrentThread.CurrentCulture.ToString()));
            sb.AppendLine(string.Format("CurrentUICulture: {0}", System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()));
            // uptime stats
            sb.AppendLine(string.Format("System Uptime: {0} Days {1} Hours {2} Mins {3} Secs", Math.Round((decimal)Environment.TickCount / 86400000), Math.Round((decimal)Environment.TickCount / 3600000 % 24), Math.Round((decimal)Environment.TickCount / 120000 % 60), Math.Round((decimal)Environment.TickCount / 1000 % 60)));
            sb.AppendLine(string.Format("Program Uptime: {0}", proc.TotalProcessorTime.ToString()));
            // process id
            sb.AppendLine(string.Format("PID: {0}", proc.Id));
            // exe name
            sb.AppendLine(string.Format("Executable: {0}", Application.ExecutablePath));
            sb.AppendLine(string.Format("Process Name: {0}", proc.ToString()));
            sb.AppendLine(string.Format("Main Module Name: {0}", proc.MainModule.ModuleName));
            // exe stats
            sb.AppendLine(string.Format("Module Count: {0}", proc.Modules.Count));
            sb.AppendLine(string.Format("Thread Count: {0}", proc.Threads.Count));
            sb.AppendLine(string.Format("Thread ID: {0}", System.Threading.Thread.CurrentThread.ManagedThreadId));
            sb.AppendLine(string.Format("Is Debugged: {0}", Debugger.IsAttached));

            sb.AppendLine();
            sb.AppendLine("Running processes: ");
            foreach (System.Diagnostics.Process winProc in System.Diagnostics.Process.GetProcesses())
            {
                //sb.AppendLine(string.Format("{0}: {1} {2}", winProc.Id, winProc.ProcessName, winProc.MainWindowTitle));
                sb.Append(string.Format("{0}: {1}, ", winProc.Id, winProc.ProcessName));
            }
            sb.AppendLine();

            if (settings == null)
            {
                sb.AppendLine("Settings unknown.");
                sb.AppendLine();
            }
            else
            {
                sb.AppendLine("Settings:");
                sb.AppendLine(string.Format("IsConfirmDelete: {0}", settings.Fields.IsConfirmDelete));
                sb.AppendLine(string.Format("IsCheckUpdate: {0}", settings.Fields.IsCheckUpdate));
                sb.AppendLine(string.Format("IsOrientationVert: {0}", settings.Fields.IsOrientationVert));
                sb.AppendLine(string.Format("IsSameFileName: {0}", settings.Fields.IsSameFileName));
                sb.AppendLine(string.Format("IsSaveLoadListDub: {0}", settings.Fields.IsSaveLoadListDub));
                sb.AppendLine(string.Format("IsAllowDelAllFiles: {0}", settings.Fields.IsAllowDelAllFiles));
                sb.AppendLine(string.Format("IsDontUpdateSize: {0}", settings.Fields.IsDontUpdateSize));
                sb.AppendLine(string.Format("IsScanMax: {0}", settings.Fields.IsScanMax));
                sb.AppendLine(string.Format("MaxFile: {0}", settings.Fields.MaxFile));
                sb.AppendLine(string.Format("PathHistoryLength: {0}", settings.Fields.PathHistoryLength));
                sb.AppendLine(string.Format("limits: [{0}, {1}]", settings.Fields.limits[0], settings.Fields.limits[1]));
                sb.AppendLine(string.Format("IncludePattern: {0}", settings.Fields.IncludePattern));
                sb.AppendLine(string.Format("ExcludePattern: {0}", settings.Fields.ExcludePattern));
                sb.AppendLine(string.Format("ProgramFont: {0}", settings.Fields.ProgramFont.ToFont().ToString()));
                sb.AppendLine(string.Format("ListRowFont: {0}", settings.Fields.ListRowFont.ToFont().ToString()));
                sb.AppendLine(string.Format("ColorRow1: {0}", settings.Fields.ColorRow1.ToColor().ToString()));
                sb.AppendLine(string.Format("ColorRow2: {0}", settings.Fields.ColorRow2.ToColor().ToString()));
                sb.AppendLine(string.Format("ColorRowError: {0}", settings.Fields.ColorRowError.ToColor().ToString()));
                sb.AppendLine(string.Format("ColorColorRowNotExist: {0}", settings.Fields.ColorRowNotExist.ToColor().ToString()));
                sb.AppendLine(string.Format("Language: {0}", settings.Fields.Language));
                sb.AppendLine(string.Format("LastJob: {0}", settings.Fields.LastJob));
                sb.AppendLine(string.Format("FastCheck: {0}", settings.Fields.FastCheck));
                sb.AppendLine(string.Format("FastCheckFileSizeMb: {0}", settings.Fields.FastCheckFileSizeMb));
                sb.AppendLine(string.Format("FastCheckBufferKb: {0}", settings.Fields.FastCheckBufferKb));
                sb.AppendLine(string.Format("UseDB: {0}", settings.Fields.UseDB));
                sb.AppendLine();
            }

            if (lv != null)
            {
                sb.AppendLine("ListView:");
                sb.AppendLine(string.Format("Name: {0}", lv.Name));
                sb.AppendLine(string.Format("Items: {0}", lv.Items.Count));
                sb.AppendLine(string.Format("Groups: {0}", lv.Groups.Count));
                if (lv.Items.Count > 0)
                {
                    sb.AppendLine(string.Format("lv.Items[0].Name: {0}", lv.Items[0].Name));
                    sb.AppendLine(string.Format("lv.Items[0].Text: {0}", lv.Items[0].Text));
                    sb.AppendLine(string.Format("lv.Items[0].Tag: {0}", lv.Items[0].Tag));
                    sb.AppendLine(string.Format("lv.Items[0].Group: {0}", lv.Items[0].Group));
                    sb.AppendLine(string.Format("lv.Items[0].Checked: {0}", lv.Items[0].Checked));
                    sb.AppendLine(string.Format("lv.Items[0].SubItems.Count: {0}", lv.Items[0].SubItems.Count));
                    for (int i = 0; i < lv.Items[0].SubItems.Count; i++)
                    {
                        sb.AppendLine(string.Format("lv.Items[0].SubItems[{0}].Name: {1}", i, lv.Items[0].SubItems[i].Name));
                        sb.AppendLine(string.Format("lv.Items[0].SubItems[{0}].Text: {1}", i, lv.Items[0].SubItems[i].Text));
                        sb.AppendLine(string.Format("lv.Items[0].SubItems[{0}].Tag: {1}", i, lv.Items[0].SubItems[i].Tag));
                    }
                }
                sb.AppendLine();
            }

            sb.AppendLine(string.Format("User Error: {0}", labelError.Text));
            Exception exep = ex;
            for (int i = 0; exep != null; exep = exep.InnerException, i++)
            {
                sb.AppendLine();
                sb.AppendLine(string.Format("Type #{0} {1}", i, ex.GetType().ToString()));

                foreach (System.Reflection.PropertyInfo propInfo in ex.GetType().GetProperties())
                {
                    string fieldName  = string.Format("{0} №{1}", propInfo.Name, i);
                    string fieldValue = string.Format("{0}", propInfo.GetValue(ex, null));

                    // Ignore stack trace + data

                    /*if (propInfo.Name == "StackTrace"
                    || propInfo.Name == "Data"
                    || string.IsNullOrEmpty(propInfo.Name)
                    || string.IsNullOrEmpty(fieldValue))
                    ||  continue;*/
                    if (propInfo.Name == "StackTrace" ||
                        string.IsNullOrEmpty(propInfo.Name) ||
                        string.IsNullOrEmpty(fieldValue))
                    {
                        continue;
                    }

                    sb.AppendLine(string.Format("{0}: {1}", fieldName, fieldValue));
                }

                if (ex.Data != null)
                {
                    foreach (System.Collections.DictionaryEntry de in ex.Data)
                    {
                        sb.AppendLine(string.Format("Dictionary Entry №{0}: Key: {1} Value: {2}", i, de.Key, de.Value));
                    }
                }
            }

            string st;
            if (ex != null)
            {
                if (ex.StackTrace == null)
                {
                    st = new StackTrace(true).ToString();
                }
                else
                {
                    st = ex.StackTrace;
                }
            }
            else
            {
                st = new StackTrace(true).ToString();
            }
            sb.AppendLine("StackTrace:");
            sb.AppendLine(st);

            textBox.Text = sb.ToString();

            Thread.CurrentThread.CurrentCulture = oldCulture;
        }
예제 #2
0
 public CrashReport(string msg, SettingsApp settings, ListView lv) : this(msg, null, settings, lv)
 {
 }
예제 #3
0
 public CrashReport(Exception ex, SettingsApp settings, ListView lv) : this(null, ex, settings, lv)
 {
 }
예제 #4
0
 public CrashReport(string msg, SettingsApp settings)    : this(msg, null, settings, null)
 {
 }
예제 #5
0
 public CrashReport(Exception ex, SettingsApp settings)  : this(null, ex, settings, null)
 {
 }