2015-05-27 21 views
5

Ciao Ho questo progetto che presenta alcuni problemi con quelli che dovrebbero essere i miei codici per il gestore "problema".Gestire le eccezioni globali in VB

Public Event UnhandledException As UnhandledExceptionEventHandler 

Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain 

      AddHandler currentDomain.UnhandledException, AddressOf MyHandler 
     End Sub 

    Sub MyHandler(ByVal sender As Object, ByVal args As UnhandledExceptionEventArgs) 
      Dim e As Exception = DirectCast(args.ExceptionObject, Exception) 

      Using sw As New StreamWriter(File.Open(myFilePath, FileMode.Append)) 
       sw.WriteLine(Date.now & e.toString) 
      End Using 

      MessageBox.Show("An unexcpected error occured. Application will be terminated.") 
      Application.Exit() 
     End Sub 

     Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click 
      Throw New Exception("Dummy Error") 
     End Sub 

Sto cercando di globalmente cattura tutte le eccezioni e creare file di log durante il runtime, che funziona bene nel debugger (gestione delle eccezioni e la scrittura file di testo), ma non riesco a intercettare eventuali eccezioni non gestite dopo ho costruire nel progetto di installazione e Installato in una macchina. Cosa mi manca? Devo includere componenti aggiuntivi nel mio progetto di installazione? L'aiuto sarebbe molto apprezzato

+0

Il gestore funziona affatto, ad es. se si sposta il 'MessageBox' per essere la prima riga del gestore lo vedi? Potrebbe essere che stai ricevendo un errore nel gestore (ad esempio intorno al logging?) – theduck

+0

Ho provato a spostare MessageBox sulla prima riga del gestore e sì si presenta. Ho provato a posizionare il punto di interruzione all'inizio del gestore e l'ingresso e il flusso attraverso il gestore – Adrian

+0

Le autorizzazioni sul file di registro sono valide per l'utente che esegue l'applicazione? – theduck

risposta

7

Esiste già un modo per gestire le eccezioni per l'intera applicazione. Incorporare il gestore in un formato significa che verrebbero catturati e registrati solo se e mentre tale modulo era aperto.

  1. Vai Progetto -> Proprietà -> Application e fare clic sul pulsante "Visualizza Application Events" a/vicino al fondo.

  2. Si aprirà ApplicationEvents.vb.

  3. Selezionare (MyApplicationEvents) nel menu di sinistra; e UnhandledException a destra. Questo apre un gestore di eventi altrimenti tipico a cui è possibile aggiungere codice:

    Private Sub MyApplication_UnhandledException(sender As Object, 
                  e As ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException 
    
        Dim myFilePath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), 
                  "badjuju.log") 
    
        Using sw As New StreamWriter(File.Open(myFilePath, FileMode.Append)) 
         sw.WriteLine(DateTime.Now) 
         sw.WriteLine(e.Exception.Message) 
        End Using 
    
        MessageBox.Show("An unexcpected error occured. Application will be terminated.") 
        End 
    
    End Sub 
    

Questo non intercettare le eccezioni, mentre l'IDE è in funzione perché VS li coglie prima in modo da poter vedere e fissarli.

Problemi correlati