在.NET 4.0之后,CLR将会区别出一些异常(都是SEH异常),将这些异常标识为破坏性异常(Corrupted State Exception)。针对这些异常,CLR的catch块不会捕捉这些异常。SEH异常通常是非托管代码抛出的。

例如:调用c和c++的lib和dll库,都是非托管的。

解决:

1.在托管程序的.config文件里,启用legacyCorruptedStateExceptionsPolicy这个属性,即简化的.config文件类似下面的文件:

<?xml version="1.0"?>
<configuration>
 <startup>
   <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
 </startup>
    <runtime>
      <legacyCorruptedStateExceptionsPolicy enabled="true" />
    </runtime>
</configuration>

2.在需要捕捉破坏性异常的函数外面加一个HandleProcessCorruptedStateExceptions属性,这个属性只控制一个函数,对托管程序的其他函数没有影响

[HandleProcessCorruptedStateExceptions]
 void function()
 {
     try
     {
     }
     catch (Exception e)
     {
     }
 }

 

相关文章:

  • 2022-03-01
  • 2021-10-19
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-02
猜你喜欢
  • 2021-11-14
  • 2022-12-23
  • 2021-09-15
  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案