У меня есть программа с некоторыми DLL-расширениями, которые загружаются во время выполнения. Интерфейс - это CefSharp в WinForms. Но программа уже такая большая, использует некоторые другие части стороннего кода (о которых я не могу позаботиться), и эта программа должна работать без постоянного обслуживания в удаленном магазине, поэтому мне нужен глобальный обработчик исключений. для неперехваченных исключений, чтобы обрабатывать эти исключения и регистрировать их для анализа.
Я уже действительно искал решения и руководства, но ничего не помогло мне.
Основная форма просто запускает другую сборку (и дает ему объект формы), и эта сборка «делает свое дело». например добавьте в форму CefSharp-Browser.
Я попытался добавить метод обработки Handles Me.UnhandledException, MyBase.UnhandledException, MyClass.UnhandledException
в ApplicationEvents.vb
Namespace My
Partial Friend Class MyApplication
Protected Overrides Function OnInitialize(ByVal commandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
Me.MinimumSplashScreenDisplayTime = 0
AddHandler My.Application.UnhandledException, AddressOf UnhandledExceptionHandler
Return MyBase.OnInitialize(commandLineArgs)
End Function
Public Sub UnhandledExceptionHandler(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException, MyBase.UnhandledException, MyClass.UnhandledException
Dim errstr = $"Message: {vbNewLine}
{e.Exception.Message}{vbNewLine}
{vbNewLine}
InnerMessage: {vbNewLine}
{e.Exception.InnerException.Message}{vbNewLine}
{vbNewLine}
Stacktrace: {vbNewLine}
{e.Exception.StackTrace.ToString()}{vbNewLine}"
MsgBox($"Aa uncaught exception was thrwon! {vbNewLine} {vbNewLine} {errstr}")
End Sub
End Class
End Namespace
Но этот метод UnhandledExceptionHandler
никогда не вызывается, даже если выбрасываются исключения, которые помечаются отладчиком как неперехваченные и вызывают приостановку отладки.
Итак, если мой вопрос был непонятен: может ли кто-нибудь помочь мне или объяснить мне, где я допустил ошибку, где я мог сделать неправильное предположение или как будет работать такой обработчик неперехваченных исключений.
в vb.net в Visual Studio 2017
Load
формы, значит, вы его не видите. Такие исключения игнорируются в 64-битной системе. Если вы хотите узнать почему, вы можете поискать это. - person jmcilhinney   schedule 05.01.2018Load
обработчике событий формы, и оно тоже сработало правильно, так что, возможно, Microsoft наконец-то решила эту вопиющую проблему. Итак, я вижу, что он работает так, как должен, если все сделано так, как я описал. Если вы говорите об исключении, сгенерированном браузером в коде JavaScript, то оно, конечно, не будет вызывать вашUnhandledException
обработчик событий, потому что здесь нет управляемого исключения. Если браузер не выдаст исключение в управляемом коде, вашему приложению нечего перехватить. - person jmcilhinney   schedule 05.01.2018Handles
и выражениеAddHandler
предполагают, что вы сделали то, для чего нет веских причин. - person jmcilhinney   schedule 05.01.2018