SEHException не перехвачен Try / Catch
В фоновом режиме мое приложение регулярно проверяет сетевую папку (UNC Path) на наличие обновлений приложения. Он считывает сборочную версию файла, например так:
Try
newVers = System.Reflection.AssemblyName.GetAssemblyName("\\server\app.exe").Version
Catch ex As Exception
' ignore
End Try
Этот фрагмент выполняется довольно часто, в общей сложности яУгадайте более 100.000 раз на сайтах нескольких клиентов, пока без проблем.
Иногда,GetAssemblyName
поднимаетFileNotFoundException
Например, в случае, если сетевая папка недоступна (что может произойти и с этим нужно разобраться). Это исключение пойманоCatch
блок чуть ниже, и все работает просто отлично.
Однако в трех зарегистрированных случаяхGetAssemblyName
вызов поднялSEHException
, Странно то, что это исключение не было пойманоCatch
блок чуть ниже, но мой глобальный обработчик необработанных исключений (System.AppDomain.CurrentDomain.UnhandledException
). В результате приложение вылетает.
Вот деталь исключения (к сожалению,ErrorCode
а такжеCanResume
поля исключения не регистрируются моей процедурой обработки ошибок):
Caught exception: System.Runtime.InteropServices.SEHException
Message: External component has thrown an exception.
Source: mscorlib
TargetSite: System.Reflection.AssemblyName nGetFileInformation(System.String)
StackTrace:
at System.Reflection.AssemblyName.nGetFileInformation(String s)
at System.Reflection.AssemblyName.GetAssemblyName(String assemblyFile)
at SyncThread.Run()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Почему исключение не уловленоCatch
блок чуть ниже?
(Может быть, это уместно: это происходило только на сайтах клиентов, где путь UNC указывал на сервер, который не был частью локальной сети, но был удаленным сервером в VPN).