2015-05-27 24 views
5

Xin chào Tôi có dự án này đang gặp phải một số vấn đề với những gì được cho là mã của tôi cho trình xử lý "sự cố".Xử lý ngoại lệ toàn cầu trong 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 

Tôi đang cố gắng trên toàn cầu bắt tất cả các trường hợp ngoại lệ và tạo logfile trong thời gian chạy, hoạt động tốt trong các chương trình gỡ rối (xử lý ngoại lệ và textfile văn bản) nhưng không thể bắt bất kỳ trường hợp ngoại lệ unhandled sau khi tôi xây dựng nó trong dự án thiết lập và Cài đặt vào máy. Tôi đang thiếu gì? Tôi có cần thêm các thành phần bổ sung vào dự án thiết lập của mình không? Trợ giúp sẽ được đánh giá rất cao

+0

Trình xử lý có chạy không - tức là. nếu bạn di chuyển 'MessageBox' thành dòng đầu tiên trong trình xử lý, bạn có thấy nó không? Nó có thể là bạn đang nhận được một lỗi trong xử lý (ví dụ xung quanh việc đăng nhập?) – theduck

+0

Tôi đã cố gắng di chuyển MessageBox đến dòng đầu tiên của xử lý và có nó xuất hiện. Tôi đã thử đặt điểm ngắt vào đầu của trình xử lý và bước vào và chảy ngay qua trình xử lý – Adrian

+0

Các quyền trên tệp nhật ký có được chấp nhận cho người dùng đang chạy ứng dụng không? – theduck

Trả lời

7

Đã có cách xử lý ngoại lệ cho toàn bộ ứng dụng. Việc nhúng trình xử lý vào biểu mẫu có nghĩa là chúng sẽ chỉ bị bắt và ghi lại nếu và trong khi biểu mẫu đó được mở.

  1. Tới Project -> Properties -> Application và nhấp vào nút "View Application Sự kiện" tại/gần phía dưới.

  2. Điều này sẽ mở ra ApplicationEvents.vb.

  3. Chọn (MyApplicationEvents) ở menu bên trái; và UnhandledException ở bên phải. Điều này mở ra một event handler khác điển hình mà bạn có thể thêm mã:

    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 
    

này sẽ không bắt ngoại lệ trong khi IDE đang chạy vì VS bắt họ đầu tiên để bạn có thể nhìn thấy chúng và sửa chữa chúng.