none
新创建的AppDomain crash导致host AppDomain crash RRS feed

  • 问题

  • 我在主应用程序域中新创建一个子AppDomain,并且在新的AppDomain中加载并运行Assembly,由于被加载的Assembly中的UnhandledException导致新AppDomain crash,并最终导致host AppDomain crash. 子AppDomain中未处理的异常可以通过UnhandledException事件捕获,但我不知道怎么阻止它。
    我想在子AppDomain由于未知异常导致AppDomain crash时,host AppDomain可以获知并且采取相应的处理(如重新加载子AppDomain) 。请问该怎么做?

    2009年11月25日 10:35

答案

全部回复

  • 你好!
         一般来说每个AppDomain都有自己的异常处理系统,彼此是隔离的,一个AppDomain的异常不会影响到另外一个AppDomain!
         除非是一些跨边界的异常,通常问题已经相当严重了,UnhandledException事件中你几乎做不了什么太多的控制,只能记录一些日志等!
    周雪峰
    2009年11月25日 14:03
    版主
  • 你好,
          首先,我的这两个域之间有主从关系,是在一个域下创建的另一个域。这个程序是我从一个双进程的监护程序改造来的,因为我看到AppDomain被称为light-weight process.我就想能不能用2个AppDomain替换掉原来程序中的2个进程。子AppDomain中的Exception是我在测试中人为创造的,当子域启动后,我开启另一线程每隔一段时间抛一次错误,用来模拟应用中加载程序可能出现的一些问题。我试了divide 0,throw exception, 申请大块内存等异常,都会导致子AppDomain连带host AppDomain crash。
    2009年11月25日 14:28
  • 在线程上未处理的Exception,将使Host进程退出,参考下面的文章:

    http://msdn.microsoft.com/en-us/library/ms228965.aspx

    你应该捕获异常,然后卸载AppDomain在这种情况.
    Best regards,
    Riquel
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年11月30日 10:04
    版主