2011-05-18 15 views
13

Uygulamamda işlenmeyen bir istisna olduğumu söyleyebilirim veya herhangi bir nedenle çöküyor. Çıktıyı yakalamak ve uygulama çöktüğünde bir hata raporu iletişim kutusu görüntülemek için bir yol var mı.Bir WPF Uygulamasından İstisna raporlaması

Düşündüğüm şey arka planda çalışan küçük bir programa sahip olmaktır; bu, yalnızca uygulamanın ana uygulamanın anormal bir çıkışını dinlemesi ve ardından kullanıcının bana e-posta göndermeyi seçebileceği 'rapor' iletişim kutusunu göstermesidir. hatanın çıktısı.

Bunu nasıl uygulayacağınızdan emin değilsiniz ya da bunu yapmak için doğru yol buysa.

Hata iletisini bildirmek kolay bir iş olabilir, ancak işlenmeyen bir özel durumun çıktısını nasıl yakalayacağımı veya çıkış kodlarını nasıl yakalayacağımı bilmiyorum (programın o zaman başka bir çıkış kodu vereceğini varsayalım) çöker.

Doğru yönde bir dürtüye sahip olmak harika olurdu.

+0

Ne tür bir uygulama? ASP.NET? –

+0

Bu bir C# WPF uygulaması –

cevap

12

En iyi şansınız uygulama içinde. İki kanca vardır:

uygun yerdir ipler Formlar gerçekleştiğini istisnalar için için 'yakalama olduğunu -all 'uygulama semantiklerine bağlıdır ve uygulamanızı bildiğiniz yere koymanız gerektiğini söylemek zordur. Uygulama ayrıca Application.SetUnhandledExceptionMode'u da ayarlamalıdır.

Dış bir izleme köpeği olması, uygulamanın neden çökmesiyle ilgili herhangi bir anlamlı bilgi veremediğinden daha az kullanışlıdır. “Beklenmeyen” bir çıkış tespit ettiğinde (nasıl anlayacağı 'beklenmedik') herhangi bir yararlı bilgi toplamak için çok geç. Bir iç işleyici ile istisnayı ve yığını toplayabilir ve bugcollect.com gibi bir analiz hizmetine gönderebilir ve sonra sadece 'un ne anlama geldiğini anlayabilmeniz için bir bacağınız olur, ancak ne olur? ne sıklıkta olur ve hangi dağıtım gerçekleşir? etkilenir (burada olur). exceptioneer.com veya Windows Error Reporting gibi diğer benzer hizmetler vardır (bu, kodunuzun Verisign gibi güvenilir bir yetki sertifikasıyla imzalanmasını gerektirir). Olayların toplanması için bir hizmete güvenmek posta göndermekten çok daha üstündür, uyandırmak ve gelen kutunuza 2k gelen e-postaları bulmak istemez ve 'un ne olduğunu anlamak için'un ne olduğunu anlamaya başlayabilirsiniz.

Son bir dünya: tekerleği yeniden icat etmeyin: log4net ve elmah gibi istisnaları toplamak ve günlüğe kaydetmek için çok sayıda çerçeve var.

+0

'Tümünü yakala' tüm iş parçacıklarındaki özel durumları yakalar mı yoksa her iş parçacığına abone olur mu? E-posta yaklaşımını yeniden inceledim ve belli ki bir çeşit veri tabanı daha iyi olurdu. :) –

+0

İlki bir appdomain'deki tüm thread'larda. –

+0

WPF uygulaması için Application.ThreadException mevcut değil. Bunun yerine DispatcherUnhandledException işlemek gerekir. –

8

Bunun için NBug kitaplığını kullanabilirsiniz (ayrıca kolay kurulum için nuget package here'u da kullanabilirsiniz). Basitçe Nuget paketini kurun ve aşağıda gibi yapılandırın:

NBug.Settings.Destination1 = 
    "Type=Mail;[email protected];[email protected];SmtpServer=smtp.mycompany.com;"; 
AppDomain.CurrentDomain.UnhandledException += NBug.Handler.UnhandledException; 
Application.Current.DispatcherUnhandledException += NBug.Handler.DispatcherUnhandledException; 

Artık tüm işlenmeyen istisna güzel yakalanmış ve sizin için giftwrapped edilecek ve e-posta yoluyla istisna ilgili tüm ayrıntıları alırsınız. Yapılandırmanızın doğru olduğundan emin olmak için yapılandırıcı aracını kullanın.

0

Application.ThreadException olayını ele almalısınız.

+0

Bir WPF uygulaması için mevcut değil. –