appdomain unhandleexception 捕获 卸载问题求助

问题描述

需求描述:我在主域中通过反射方式动态加载很多dll进来,每个dll都分配一个独立的域,供其执行。如果一个域中的dll执行出错,则卸载该域,记录日志,然后重新拉起。问题:现在某个域中出错,直接导致进程退出,而我能做的只是通过unhandleexeception来知道是啥导致问题,但我无法阻止进程退出。我希望的是我抓取到错误之后,把对应的域卸载掉,重拉,主进程不可以退出。求大神指点

解决方案

解决方案二:
如果动态加载的dll不可靠,你要做进程级别的隔离。AppDomain隔离不能解决dll崩溃问题。你可以自己做(我觉得比用MAF要直接些),或用微软的MAF(MicrosoftAdd-inFramework)。但是,两种做法都比较复杂(因为要提供进程级别的隔离)。MAF参考和例子可见:https://msdn.microsoft.com/en-us/library/bb384200%28v=vs.110%29.aspx
解决方案三:
引用1楼Forty2的回复:

如果动态加载的dll不可靠,你要做进程级别的隔离。AppDomain隔离不能解决dll崩溃问题。你可以自己做(我觉得比用MAF要直接些),或用微软的MAF(MicrosoftAdd-inFramework)。但是,两种做法都比较复杂(因为要提供进程级别的隔离)。MAF参考和例子可见:https://msdn.microsoft.com/en-us/library/bb384200%28v=vs.110%29.aspx

我找到解决方案了,可以通过配置文件指定对于unhandleexception的处理方式为legacy即可。

时间: 2024-11-10 00:54:04

appdomain unhandleexception 捕获 卸载问题求助的相关文章

AppDomain与Assembly的动态加载与卸载简介

为了将问题描述清楚,我们先来看一个例子.在这个例子中,WinForm上有一个按钮,当用户点击这个按钮后,就会装载一个已经存在的Assembly,并且在界面的Label控件上显示出这个Assembly的FullName.对Reflection稍微熟悉一点的朋友都知道,这是非常简单的事情,只需要用Assembly.LoadFile方法获得Assembly,然后用FullName属性来显示即可,比如下面的代码: private void button1_Click(object sender, Eve

AppDomain与Assembly的动态加载与卸载

为了将问题描述清楚,我们先来看一个例子.在这个例子中,WinForm上有一个按钮,当用户点击这个按钮后,就会装载一个已经存在的Assembly,并且在界面的Label控件上显示出这个Assembly的FullName.对Reflection稍微熟悉一点的朋友都知道,这是非常简单的事情,只需要用Assembly.LoadFile方法获得Assembly,然后用FullName属性来显示即可,比如下面的代码: privatevoidbutton1_Click(objectsender,EventAr

让用户通过宏和插件向您的 .NET 应用程序添加功能

程序 Jason Clark 本文假设您熟悉 .NET 与 C# 下载本文的代码: Plug-Ins.exe (135KB) 概述 大多数用户应用程序都受益于可由其他开发人员扩展的能力. 扩展一个用户已经很熟悉并针对它进行过培训的现有应用程序往往比从头开发来得简单和有效.因此,可扩展性会使您的应用程序更加吸引人. 您可以通过支持插件和宏等功能来使应用程序具有可扩展性. 使用 .NET Framework 可以轻松实现这一点,即使核心应用程序不是 .NET Framework 应用程序. 在本文中

.NET 动态加载程序集 (三)

我们先看看一般的反射的动态方法查找 下面为ms自带的例子ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemreflectionmethodbaseclassinvoketopic.htm public class A {    public virtual int method () {return 0;} } public class B {    public virtual int method () {return 1;} }

WPF:用于承载第三方 .NET 插件的体系结构

去年 11 月,Bloomberg L.P.发布了应用程序门户,它是一个应用程序平台,独立的第三 方软件开发者可借助该平台面向 Bloomberg 专业服务的 300,000 多名用户销售其基于 Microsoft .NET Framework Windows Presentation Foundation (WPF) 的应用程序. 在本文中,我们将介绍一个用来承载第三方"不受信任的".NET 应用程序的通用体系结 构,它与 Bloomberg 应用程序门户使用的体系结构类似.附带的源

Remoting基本原理及扩展机制(下)

让我们在开始本节内容之前先了解以下几个基本概念. 应用程序域 应用程序域(通常简称为AppDomain)可以视为一种轻量级进程.一个Windows进程内可以包含多个AppDomain.AppDomain这个概念的提出是为了实现在一个物理服务器中承载多个应用程序,并且这些应用能够相互独立.ASP.NET中利用AppDomain在同一个进程内承载了多组Web应用程序就是一个例子.实际上微软曾进行过在单一进程内承载多达1000个简单Web应用程序的压力测试. 使用AppDomain所获得的性能优势主要

C#中的线程(四)高级话题

Keywords:C# 线程Source:http://www.albahari.com/threading/Author: Joe AlbahariTranslator: Swanky WuPublished: http://www.cnblogs.com/txw1958/Download:http://www.albahari.info/threading/threading.pdf   第四部分:高级话题   非阻止同步 早些时候,我们讨论了非常简单的赋值和 更新一个字段时需要使用同步的例

详细介绍.NET中的动态编译技术_实用技巧

代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往又很难用静态页面实现,那么将动态页面生成html的工作或许

.NET 动态编译_实用技巧

这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往又很难用静态页面实现,那么将动态页面生成html的工作或许就是一个很好的应用场合.另外,对于一些模板的套用,我们同样可以用它来做.另外这本身也是插件编写的方式.   最基本的动态编译   .Net为我们提供了很强大的支持来实现这