Простой отчет о сбое? - PullRequest
       6

Простой отчет о сбое?

7 голосов
/ 12 декабря 2010

Я рассматриваю реализацию простого отчета о сбое в моем приложении, который будет спрашивать пользователя, хочет он или нет отправлять нам журнал сбоя.

Я никогда раньше не делал отчет о сбое, чем я являюсьобычно используется попытка сохранить ошибки в файле журнала.

  1. Как правильно внедрить систему отчетов о сбоях?

  2. Как вы запускаете отчет о сбое, чтобы открыть и отправить дамп при сбое приложения или какой правильный способ отправки данных?

Я думаю, что вышеизложенные мои самые большие сомнения относительно того, как это работает или должно работать ... Я не совсем уверен, будет ли отчет о сбое взаимодействием try / catch с внешним приложением, сработавшим, когда вышеописанное произойдетили какой правильный способ следовать ему.

У меня нет доступного SQL Server, поэтому я планировал использовать простой сценарий загрузки, который приложение, которое сообщит о дампе, будет использовать для отправки данных.

Прошу прощения за мое незнание о том, как работает отчет о сбое, и я надеюсь, что сообщество поможет мне лучше понять его.

Я искал вокруг сообщения о сбое и видел, что большинство вещей происходит вокруг CrystalОтчет, готовые библиотеки и т. Д., Но я хотел бы начать с малого, чтобы лучше понять его, прежде чем копаться в какой-нибудь большой библиотеке или другом решении, если оно доступно на моем конце.

Ответы [ 4 ]

6 голосов
/ 12 декабря 2010

Рассматривали ли вы использование встроенного Windows Error Reporting ?

Вы можете использовать веб-сайт Winqual для просмотр конкретного драйвера, для конкретного приложения или операционной системные ошибки, связанные с ваша организация. Каждый отчет об ошибке предоставляет подробности, связанные с этим ведро, и вы можете запросить файл связанных данных.

Для просмотра отчетов об ошибках:

  1. Создание учетной записи Winqual. Чтобы защитить компании от подражания и убедиться, что отчеты об ошибках перейти к представителю от правильная компания, веб-сайт Winqual требует от вашей компании действительного VeriSign ID.

• Обратитесь в юридический отдел; ваша компания уже может иметь VeriSign ID (также называется программным обеспечением Цифровой идентификатор издателя для Authenticode). • Проверьте Winqual чтобы увидеть, если ваша компания уже имеет счет.

  1. Принять соглашение об ошибках Windows.

  2. Войдите на сайт Winqual.

  3. Нажмите Отчеты об ошибках Windows.

Эта старая статья может представлять интерес: Простой класс для отлова необработанных исключений в WinForms

4 голосов
/ 15 мая 2012

Сверните свой собственный обработчик исключений.Используйте приведенный ниже код в своем классе program.cs.Он будет автоматически отправлять почту при возникновении исключения.

using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;
using System.Threading; 

namespace ExceptionHandlerTest
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.ThreadException +=
                new ThreadExceptionEventHandler(Application_ThreadException);

            // Your designer generated commands.
        }

        static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
        {

            var fromAddress = new MailAddress("your Gmail address", "Your name");
            var toAddress = new MailAddress("email address where you want to receive reports", "Your name");
            const string fromPassword = "your password";
            const string subject = "exception report";
            Exception exception = e.Exception;
            string body = exception.Message + "\n" + exception.Data + "\n" + exception.StackTrace + "\n" + exception.Source;

            var smtp = new SmtpClient
            {
                Host = "smtp.gmail.com",
                Port = 587,
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
            };
            using (var message = new MailMessage(fromAddress, toAddress)
            {
                Subject = subject,
                Body = body
            })
            {
                //You can also use SendAsync method instead of Send so your application begin invoking instead of waiting for send mail to complete. SendAsync(MailMessage, Object) :- Sends the specified e-mail message to an SMTP server for delivery. This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes. 
                smtp.Send(message);
            }
        }
    }
}

Вы можете сэкономить свое время, получив библиотеку отчетов о сбоях на основе этого https://crashreporterdotnet.codeplex.com

4 голосов
/ 12 декабря 2010

Многое зависит от приложения и (в частности) ожидаемых проблем конфиденциальности ваших пользователей.

Предполагая, что это клиентское приложение, запущенное на компьютерах пользователей, если это внутреннее приложение «интрасети», то онодолжно быть довольно просто, чтобы приложение отправляло вам файл журнала по электронной почте при выходе из приложения.

Это может быть довольно забавно, так как иногда вы исправляете ошибку до того, как пользователи сообщают о ней.

В качестве альтернативы, если вы обеспокоены тем, что приложение может аварийно завершить работу и необработанное исключение не будет перехвачено должным образом, вы можете

  1. При запуске написать запись в реестре (или пустышку).запись файла, или что-у-вас), которая помечает «приложение не завершено должным образом»
  2. При чистом выходе очистите запись реестра (или что-у-вас)
  3. При запускепроверьте, существует ли запись в реестре (и т. д.).

Если маркер присутствует, то вы знаете, что приложение не удалось очистить, поэтому вы можете предложить пользователю текст, например: «В прошлый раз, когда вы запускали эту программу, она не отображаласьправильно завершите работу. Вы хотите отправить отчет о том, что с нами произошло, чтобы мы могли попытаться исправить любую проблему, которая могла возникнуть? "

1 голос
/ 12 декабря 2010

Попробуйте использовать AppDomain.UnHandledException и / или AppDomain.ThreadException

...