C#捕捉非托管异常
2018-07-09 09:22:25    52    0    0
lion

然而并不是所有人都想要这个新的异常机制,如果你的程序是在4.0下面编译并运行,而你又想在.NET程序里捕捉到SEH异常的话,有两个方案可以尝试:

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

 

App.config:

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

 

这个设置告诉CLR 4.0,整个.NET程序都要使用老的异常捕捉机制。

 

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

using System.Runtime.ExceptionServices;

[HandleProcessCorruptedStateExceptions]
static void Main(string[] args) {
    try     {
        TestMethod();     
}
    catch (Exception e)     {
        Console.WriteLine("Catching exception: {0}", e);    
 }
}

 

你也可以下载示例代码自己试一下(需要VS 2010才能编译):

Pre: Openwrt用Python通过BMC_ILO100控制HP_DL2000服务器自动开关机

Next: 自动ping服务器脚本

52
目录