SEHException nie został złapany przez Try / Catch

W wątku w tle moja aplikacja regularnie sprawdza folder sieciowy (ścieżka UNC) w celu aktualizacji aplikacji. Odczytuje wersję zespołu pliku, tak jak poniżej:

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

Fragment ten jest wykonywany dość często, w sumie chyba ponad 100 000 razy w wielu witrynach klientów bez problemu.

Czasami,GetAssemblyName podnosiFileNotFoundException, na przykład w przypadku, gdy folder sieciowy nie jest osiągalny (co może się zdarzyć i należy się nim zająć). Ten wyjątek został złapany przezCatch blok poniżej, a wszystko działa dobrze.

W trzech zgłoszonych przypadkach jednakGetAssemblyName wezwanie podniosłoSEHException. Dziwne jest to, że ten wyjątek nie został złapany przezCatch blok poniżej, ale przez mój globalny nieobsługiwany program obsługi wyjątków (System.AppDomain.CurrentDomain.UnhandledException). W rezultacie aplikacja ulega awarii.

Oto szczegóły wyjątku (niestetyErrorCode iCanResume pola wyjątku nie są rejestrowane przez moją procedurę obsługi błędów):

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

Dlaczego wyjątek nie został złapany przezCatch blok tuż poniżej?

(Być może jest to istotne: zdarzyło się to tylko w witrynach klientów, gdzie ścieżka UNC wskazywała na serwer, który nie był częścią sieci lokalnej, ale na serwer zdalny na VPN).

questionAnswers(1)

yourAnswerToTheQuestion