SEHException nicht von Try / Catch abgefangen

In einem Hintergrundthread überprüft meine Anwendung regelmäßig einen Netzwerkordner (UNC-Pfad) auf Anwendungsaktualisierungen. Es liest die Assembly-Version der Datei wie folgt aus:

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

Dieses Snippet wird ziemlich oft ausgeführt, insgesamt schätze ich, dass es bisher problemlos mehr als 100.000 Mal bei mehreren Kunden vor Ort war.

Manchmal,GetAssemblyName wirft einFileNotFoundExceptionZum Beispiel für den Fall, dass der Netzwerkordner nicht erreichbar ist (was passieren kann und behandelt werden muss). Diese Ausnahme wird von der abgefangenCatch Block gerade unten, und alles funktioniert gut.

In drei gemeldeten Fällen wurde jedoch dieGetAssemblyName Anruf ausgelöst einSEHException. Das Seltsame ist, dass diese Ausnahme nicht von der US-Regierung abgefangen wurdeCatch Block nur unten, aber von meinem globalen unbehandelten Ausnahmehandler (System.AppDomain.CurrentDomain.UnhandledException). Infolgedessen stürzt die Anwendung ab.

Hier ist das Ausnahmedetail (leider dasErrorCode undCanResume Felder der Ausnahme werden von meiner Fehlerbehandlungsroutine nicht protokolliert):

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

Der Grund dafür ist, dass die Ausnahme von der nicht abgefangen wirdCatch Block gerade unten?

(Dies ist möglicherweise relevant: Dies ist nur bei Kunden vorgekommen, bei denen der UNC-Pfad auf einen Server verwiesen hat, der nicht Teil des lokalen Netzwerks war, sondern auf einen Remote-Server in einem VPN.)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage