这是因为.NET Framework 1.0 和 1.1 这两个版本对许多未处理异常(例如,线程池线程中的未处理异常)提供支撑,而 Framework 2.0 版中,公共语言运行库允许线程中的多数未处理异常自然继续。在多数情况下,这意味着未处理异常会导致应用程序终止。

一、C/S 解决方案(以下任何一种方法)

1. 在应用程序配置文件中,添加如下内容:

1

2

3

4

5

2. 在应用程序配置文件中,添加如下内容:

1

2

3

4

5

3. 使用Application.ThreadException事件在异常导致程序退出前截获异常。示例如下:

1 [SecurityPermission(SecurityAction.Demand, Flags =SecurityPermissionFlag.ControlAppDomain)]2 public static void Main(string[] args)3 {4 Application.ThreadException += newThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);5 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);6 AppDomain.CurrentDomain.UnhandledException += newUnhandledExceptionEventHandler(CurrentDomain_UnhandledException);7

8 Application.Run(newErrorHandlerForm());9 }

日志事件

1 private static void Form1_UIThreadException(objectsender, ThreadExceptionEventArgs t)2 {3 DialogResult result =DialogResult.Cancel;4 try

5 {6 result = ShowThreadExceptionDialog("Windows Forms Error", t.Exception);7 }8 catch

9 {10 try

11 {12 MessageBox.Show("Fatal Windows Forms Error",13 "Fatal Windows Forms Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);14 }15 finally

16 {17 Application.Exit();18 }19 }20

21 if (result ==DialogResult.Abort)22 Application.Exit();23 }24

25

26 //由于 UnhandledException 无法阻止应用程序终止,因而此示例只是在终止前将错误记录在应用程序事件日志中。

27 private static void CurrentDomain_UnhandledException(objectsender, UnhandledExceptionEventArgs e)28 {29 try

30 {31 Exception ex =(Exception)e.ExceptionObject;32 string errorMsg = "An application error occurred. Please contact the adminstrator" +

33 "with the following information:/n/n";34

35 if (!EventLog.SourceExists("ThreadException"))36 {37 EventLog.CreateEventSource("ThreadException", "Application");38 }39

40 EventLog myLog = newEventLog();41 myLog.Source = "ThreadException";42 myLog.WriteEntry(errorMsg + ex.Message + "/n/nStack Trace:/n" +ex.StackTrace);43 }44 catch(Exception exc)45 {46 try

47 {48 MessageBox.Show("Fatal Non-UI Error",49 "Fatal Non-UI Error. Could not write the error to the event log. Reason:"

50 +exc.Message, MessageBoxButtons.OK, MessageBoxIcon.Stop);51 }52 finally

53 {54 Application.Exit();55 }56 }57 }58

59

60 private static DialogResult ShowThreadExceptionDialog(stringtitle, Exception e)61 {62 string errorMsg = "An application error occurred. Please contact the adminstrator" +

63 "with the following information:/n/n";64 errorMsg = errorMsg + e.Message + "/n/nStack Trace:/n" +e.StackTrace;65 returnMessageBox.Show(errorMsg, title, MessageBoxButtons.AbortRetryIgnore,66 MessageBoxIcon.Stop);67 }

二、B/S 解决方案(以下任何一种方法)

1. 在IE目录(C:/Program Files/Internet Explorer)下建立iexplore.exe.config文件,内容如下:

1 <?xml version="1.0"?>

2

3

4

5

6

2. 不建议使用此方法,这将导致使用 framework 1.1 以后版本的程序在IE中报错。

建立同上的配置文件,但内容如下:

1 <?xml version="1.0"?>

2

3

4

5

6

3. 这个比较繁琐,分为三步:

⑴. 将下面的代码保存成文件,文件名为UnhandledExceptionModule.cs,路径是C:/Program Files/Microsoft Visual Studio 14/

1 usingSystem;2 usingSystem.Diagnostics;3 usingSystem.Globalization;4 usingSystem.IO;5 usingSystem.Runtime.InteropServices;6 usingSystem.Text;7 usingSystem.Threading;8 usingSystem.Web;9

10 namespaceWebMonitor {11 public classUnhandledExceptionModule: IHttpModule {12

13 static int _unhandledExceptionCount = 0;14

15 static string _sourceName = null;16 static object _initLock = new object();17 static bool _initialized = false;18

19 public voidInit(HttpApplication app) {20

21 //Do this one time for each AppDomain.

22 if (!_initialized) {23 lock(_initLock) {24 if (!_initialized) {25 string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll");26

27 if (!File.Exists(webenginePath)) {28 throw newException(String.Format(CultureInfo.InvariantCulture,29 "Failed to locate webengine.dll at '{0}'. This module requires .NET Framework 2.0.",30 webenginePath));31 }32

33 FileVersionInfo ver =FileVersionInfo.GetVersionInfo(webenginePath);34 _sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",35 ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);36

37 if (!EventLog.SourceExists(_sourceName)) {38 throw newException(String.Format(CultureInfo.InvariantCulture,39 "There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.",40 _sourceName));41 }42

43 AppDomain.CurrentDomain.UnhandledException += newUnhandledExceptionEventHandler(OnUnhandledException);44

45 _initialized = true;46 }47 }48 }49 }50

51 public voidDispose() {52 }53

54 void OnUnhandledException(objecto, UnhandledExceptionEventArgs e) {55 //Let this occur one time for each AppDomain.

56 if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)57 return;58

59 StringBuilder message = new StringBuilder("/r/n/r/nUnhandledException logged by UnhandledExceptionModule.dll:/r/n/r/nappId=");60

61 string appId = (string) AppDomain.CurrentDomain.GetData(".appId");62 if (appId != null) {63 message.Append(appId);64 }65

66 Exception currentException = null;67 for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException =currentException.InnerException) {68 message.AppendFormat("/r/n/r/ntype={0}/r/n/r/nmessage={1}/r/n/r/nstack=/r/n{2}/r/n/r/n",69 currentException.GetType().FullName,70 currentException.Message,71 currentException.StackTrace);72 }73

74 EventLog Log = newEventLog();75 Log.Source =_sourceName;76 Log.WriteEntry(message.ToString(), EventLogEntryType.Error);77 }78 }79 }

⑵. 打开Visual Studio 2005的命令提示行窗口

输入Type sn.exe -k key.snk后回车

输入Type csc /t:library /r:system.web.dll,system.dll /keyfile:key.snk UnhandledExceptionModule.cs后回车

输入gacutil.exe /if UnhandledExceptionModule.dll后回车

输入ngen install UnhandledExceptionModule.dll后回车

输入gacutil /l UnhandledExceptionModule后回车并将显示的”强名称”信息复制下来

⑶. 打开ASP.net应用程序的Web.config文件,将下面的XML加到里面。注意:不包括”[]”,①可能是添加到之间。

三、微软并不建议的解决方案

打开位于 %WINDIR%/Microsoft.NET/Framework/v2.0.50727 目录下的 Aspnet.config 文件,将属性 legacyUnhandledExceptionPolicy 的 enabled 设置为 true

四、跳出三界外——ActiveX

ActiveX 的特点决定了不可能去更改每个客户端的设置,采用 B/S 解决方案里的第 3 种方法也不行,至于行不通的原因,我想可能是因为 ActiveX 的子控件产生的异常直接

被 CLR 截获了,并没有传到最外层的 ActiveX 控件,这只是个人猜测,如果有清楚的朋友,还望指正。

最终,我也没找到在 ActiveX 情况的解决方法,但这却是我最需要的,无奈之下,重新检查代码,发现了其中的问题:在子线程中创建了控件,又将它添加到了主线程的 UI 上。

以前遇到这种情况,系统就会报错了,这次居然可以蒙混过关,最搞不懂的是在 framework 2.0 的 C/S 结构下也没有报错,偏偏在 IE(ActiveX) 里挂了。唉,都是宿主惹的祸。

clr20r3 mysql.data_C# CLR20R3 程序终止的几种解决方案相关推荐

  1. 【转】CLR20R3 程序终止的几种解决方案

    这是因为.NET Framework 1.0 和 1.1 这两个版本对许多未处理异常(例如,线程池线程中的未处理异常)提供支撑,而 Framework 2.0 版中,公共语言运行库允许线程中的多数未处 ...

  2. clr20r3 system.InvalidOperationException 程序终止的几种解决方案

    这是因为.NET Framework 1.0 和 1.1 这两个版本对许多未处理异常(例如,线程池线程中的未处理异常)提供支撑,而 Framework 2.0 版中,公共语言运行库允许线程中的多数未处 ...

  3. MySQL插入emoji表情错误的2种解决方案,Incorrect string value: '\xF0\x9F\x98\x84'

    确实在开发过程中遇到过类似的问题 原因:mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了. 而mysql为了解决这个问题,在5.5.3版本之 ...

  4. clr20r3 mysql.data_c#程序出现CLR20r3错误排除记录(线程问题导致)

    编译一个小程序的时候,单独运行软件以后,再编译无法生成. 单独运行后,第二次再运行就会出现CLR20r3错误,网上到处找资料无果,最后发现软件退出后在任务管理器里面还能看到已经退出的这个程序的线程. ...

  5. 京东二面:MySQL 主从延迟、读写分离 7 种解决方案!

    我们都知道互联网数据有个特性,大部分场景都是 读多写少,比如:微博.微信.淘宝电商,按照 二八原则,读流量占比甚至能达到 90% 结合这个特性,我们对底层的数据库架构也会做相应调整.采用 读写分离 处 ...

  6. MySQL插入emoji表情错误的3种解决方案,Incorrect string value: '\xF0\x9F\x98\x84'

    原因:mysql的UTF-8只支持三个字节的存储,而一般字符是三个字节,但是emoji表情是4个字节,所以存储不了. 而mysql为了解决这个问题,在5.5.3版本之后转而支持了存储4个字节的utf8 ...

  7. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案

    MySQL数据库主从没有同步的两种解决方案 发布时间:2020-05-13 13:54:57 来源:亿速云 阅读:190 作者:三月 栏目:数据库 下文主要给大家带来MySQL数据库主从没有同步的两种 ...

  8. mysql交互式查询_客户机程序5―MYSQL交互式查询程序[图]_MySQL

    6.7 客户机程序5―交互式查询程序 让我们把迄今为止研究的诸多内容整理一下,编写一个简单的交互式客户机程序.它的功能包括可以进入查询,用通用目标查询处理程序process_query 执行查询,并用 ...

  9. php mysql购物车_php mysql购物车实现程序

    php mysql购物车实现程序 (2015-05-10 21:31:00) 标签: 股票 分类: PHP 简单容易理解.cookie存购物车ID,db存购物车数据. http://www.111cn ...

最新文章

  1. “黄背心”运动持续进行 马克龙发长信呼吁沟通
  2. oracle的隐式游标有哪些,Oracle隐式游标小例子
  3. apache shiro_Apache Shiro第2部分–领域,数据库和PGP证书
  4. mov 和 lea 的区别有哪些?
  5. appium java环境_Appium环境搭建(Windows版)
  6. 如何配置Ubuntu17的软件库(sortware update)
  7. XMLHTTP---介绍
  8. 第三章 文件过滤及内容编辑处理命令
  9. 矩池云上关于conda的一些使用技巧
  10. SSM框架之Spring MVC(四)异常处理和拦截器实现
  11. 函数进阶---闭包/装饰器/迭代器/生成器---高级特性
  12. Ros简单程序编写及使用类Hello World
  13. vue uniapp如何实现横向滚动周历,横向滚动一周日历
  14. 阅读笔记4:基于运动想象的脑机接口系统模式识别算法研究
  15. 单位球坐标变换为椭球 matlab
  16. 中级php工程师笔试,PHP工程师笔试题目及行测题型示例
  17. 我只会SQL,到底能不能找到工作?
  18. python打字测速_【pygame游戏编程】第四篇-----打字测速游戏
  19. java随机点名器_Java实现简单随机点名器
  20. oracle计算日期倒计时,时间倒算回去到了哪里?│机械倒数计时码表

热门文章

  1. c++ 显示三维散点图_Python数据可视化,Matplotlib绘制“散点图”的两种方法!
  2. 作者:杨波,山东农业大学硕士生。
  3. JAVA——附加作业1——统计员工数
  4. 【软件质量】修正瑞士军刀枚举类
  5. 【C语言】第八章 地址操作与指针 题解
  6. webpack打包原理
  7. 微服务架构设计基础之领域驱动设计
  8. Berenson机器人艺术鉴赏家亮相切尔西画廊
  9. fis3+vue+pdf.js制作预览PDF文件或其他
  10. linux常用命令(16)locate命令