2015-05-27 104 views
5

您好,我有這個項目遇到了一些問題,應該是什麼應該是我的代碼「問題」處理程序。在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 

我試圖在全球範圍內捕獲所有異常,並創建運行時日誌文件,這在調試器(異常處理和文本文件寫)工作正常,但之後我在安裝項目建設無法趕上任何未處理的異常和安裝到機器中。我錯過了什麼?我是否需要將其他組件添加到我的安裝項目中?幫助將不勝感激

+0

處理程序是否運行 - 即。如果你將'MessageBox'移動到處理程序的第一行,你會發現它嗎?這可能是你在處理程序中出現錯誤(例如在日誌記錄中) – theduck

+0

我試着將MessageBox移動到處理程序的第一行,並且顯示出來。我嘗試將斷點放置到處理程序的開始處,並直接通過處理程序 – Adrian

+0

運行應用程序的用戶的日誌文件權限是否正確? – theduck

回答

7

已經有一種方法來處理整個應用程序的異常。將處理程序嵌入到表單中意味着只有當該表單處於打開狀態時纔會捕獲並記錄該處理程序。

  1. 轉到項目 - >屬性 - >應用,然後單擊「查看應用程序事件」按鈕/接近底部。

  2. 這將打開ApplicationEvents.vb

  3. 在左側菜單中選擇(MyApplicationEvents);和UnhandledException在右邊。這將打開一個典型的,否則事件處理程序,您可以添加代碼:

    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 
    

而IDE運行時,由於VS第一捉住他們,所以你可以看到他們和解決這些問題這不會捕獲異常。