7

クラッシュログを送信するかどうかをユーザーに尋ねる、アプリケーションに簡単なクラッシュレポートを実装することを検討しています。

私はこれまでクラッシュレポートを作成したことはありませんでした。私が慣れているのは、エラーをログファイルに保存することを試みてキャッチすることです。

  1. クラッシュレポートシステムを実装する正しい方法は何ですか?

  2. アプリケーションがクラッシュしたときにクラッシュレポートを開いてダンプを送信するにはどうすればよいですか、またはデータを送信するための正しいアプローチは何ですか?

上記は、それがどのように機能するか、または機能する必要があるかについての私の最大の疑問だと思います...クラッシュレポートが、上記が発生したときにトリガーされた外部アプリとの試行/キャッチの相互作用であるかどうか、またはそれに従う正しい方法。

SQL Serverを利用できないので、使用する予定だったのは、ダンプを報告するアプリがデータの送信に使用する単純なアップロードスクリプトです。

クラッシュレポートがどのように機能するかについての私の無知を許してください。コミュニティが私がそれをよりよく理解するのを助けてくれることを願っています。

私はクラッシュレポートについて探していて、Crystal Reportの周りにあるほとんどのもの、ライブラリに行く準備ができているなどを見ましたが、大きなライブラリや他のソリューションを掘り下げる前に、それをよりよく理解できるように小さく始めたいと思います私の最後に利用可能です。

4

4 に答える 4

5

組み込みのWindowsエラー報告の使用を検討しましたか?

Winqual Webサイトを使用して、組織に関連するドライバー固有、アプリケーション固有、またはオペレーティングシステム固有のエラーを表示できます。各エラーレポートには、そのバケットに関連する詳細が表示され、関連データのファイルをリクエストできます。

エラーレポートを表示するには:

  1. Winqualアカウントを確立します。会社をなりすましから保護し、エラーレポートが正しい会社の代表者に確実に届くようにするために、Winqual Webサイトでは、会社に有効なVeriSignIDが必要です。

•法務部門に確認してください。あなたの会社はすでにVeriSignID(Authenticodeのソフトウェア発行元のデジタルIDとも呼ばれます)を持っている可能性があります。•Winqualをチェックして、会社がすでにアカウントを持っているかどうかを確認します。

  1. Windowsエラー報告契約に同意します。

  2. Winqualサイトにサインインします。

  3. [Windowsエラー報告]をクリックします。

この古い記事は興味深いかもしれません:WinFormsで未処理の例外をキャッチするための単純なクラス

于 2010-12-12T06:48:48.427 に答える
4

独自の例外ハンドラをロールします。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からこれに基づいてクラッシュ レポート ライブラリを取得することで、時間を節約できます。

于 2012-05-15T09:29:36.773 に答える
4

アプリケーションと (特に) ユーザーの予想されるプライバシーの懸念に大きく依存します。

これがユーザーの PC で実行されているクライアント アプリケーションであると仮定すると、これが「イントラネット」の内部アプリケーションである場合、アプリケーションの終了時にアプリケーションからログ ファイルを電子メールで送信するのは非常に簡単です。

ユーザーがバグを報告する前にバグを修正することもあるからです。

または、アプリケーションがクラッシュする可能性があり、未処理の例外が適切にキャッチされないことが懸念される場合は、

  1. 起動時に、「アプリケーションが正しく終了していない」ことを示すレジストリ エントリ (またはダミー ファイル エントリ、または what-have-you) を書き込みます。
  2. クリーンな終了時に、レジストリ エントリ (または what-have-you) をクリーンアップします。
  3. 起動時に、レジストリ エントリ (など) が存在するかどうかを確認します。

マーカーが存在する場合は、アプリケーションがクリーンでない方法でクラッシュしたことがわかります。そのため、ユーザーにテキストでプロンプトを表示できます。発生した可能性のある問題を修正できるように、私たちに何が起こったのかを記録してください。」

于 2010-12-12T07:44:52.437 に答える
1

AppDomain.UnHandledExceptionおよび/またはAppDomain.ThreadExceptionを使用してみてください

于 2010-12-12T06:47:22.927 に答える