0

WPF: Fehlende .NET-Version abfangen

Hat man ein C#-Programm in einer neuen .NET-Version erstellt, welche auf einem Client nicht installiert ist, so stürzt es beim Starten ohne Nachricht ab. Windows meldet dann, dass das Programm nicht mehr funktioniert und fragt ob ein Problembericht gesendet werden soll.
Analysiert man den Fehler, so wird man feststellen, dass eine System.TypeLoadException geworfen wird.

Um ungefangene Exceptions zu behandeln, bietet es sich an Dispatcher.UnhandledException zu verwenden. Dazu in der App.xaml.cs folgendes einfügen:

public App() : base()
{
    this.Dispatcher.UnhandledException += OnDispatcherUnhandledException;
}

void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
    string errorMessage = string.Format("An unhandled exception occurred. The Programm will close:\n\n{0}", e.Exception);
    MessageBox.Show(errorMessage, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
    e.Handled = true;
    Application.Current.Shutdown();
}

Jetzt wird durch ungefangene Exceptions, eine entsprechende Fehlermeldung angezeigt. Will man speziell für den Fall, dass die .NET-Version fehlt, eine Meldung angeben, dann kann man die Exception so weiter prüfen:

if (e.Exception.InnerException is TypeLoadException)
{
    // .NET version is missing
}


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.