SEHException no capturada por Try / Catch

En un hilo de fondo, mi aplicación examina regularmente una carpeta de red (ruta UNC) para las actualizaciones de la aplicación. Lee la versión ensamblada del archivo, así:

Try
    newVers = System.Reflection.AssemblyName.GetAssemblyName("\\server\app.exe").Version
Catch ex As Exception
    ' ignore
End Try

Este fragmento de código se ejecuta con bastante frecuencia, en total supongo que es más de 100.000 veces en varios sitios de clientes hasta ahora sin ningún problema.

Algunas veces,GetAssemblyName plantea unFileNotFoundException, por ejemplo, en caso de que la carpeta de la red no sea accesible (lo que puede suceder y debe tratarse). Esta excepción es capturada por elCatch Bloque justo debajo, y todo funciona bien.

En tres casos reportados, sin embargo, laGetAssemblyName llamada levantó unSEHException. Lo extraño es que esta excepción no fue captada por laCatch bloque justo debajo, pero por mi controlador de excepciones no manejado global (System.AppDomain.CurrentDomain.UnhandledException). Como resultado, la aplicación se bloquea.

Aquí está el detalle de la excepción (desafortunadamente, elErrorCode yCanResume los campos de la excepción no están registrados por mi rutina de manejo de errores):

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()

Porque es que la excepción no es captada por elCatch bloque justo debajo?

(Quizás esto sea relevante: esto solo sucedió en los sitios de los clientes, donde la ruta UNC apuntaba a un servidor que no era parte de la red local, sino un servidor remoto en una VPN).

Respuestas a la pregunta(1)

Su respuesta a la pregunta