小编Mee*_*der的帖子

不同的AppDomain损坏的状态异常(AccessViolationException)应用程序池工作进程

在.NET 4.6中的AppDomain中抛出AccessViolationException(或其他损坏状态异常)时,如何防止整个应用程序(进程)崩溃?我的目标是在其AppDomain中包装第三方库(GdPicture.NET条形码阅读器),根据IIS崩溃转储间歇性地崩溃IIS工作进程.换句话说,我想在自己的应用程序域中隔离第三方库调用,这样它就可以在不占用整个网站的情况下自行失败.

在下面的示例代码中,如果我不使用HandleProcessCorruptedStateExceptions属性,则无法捕获在另一个AppDomain(在ClassLibrary1.dll中)中引发的AccessViolationException(包装在TargetInvocationException中).如果我装饰HandleProcessCorruptedStateExceptions(仅用于第二个AppDomain调用),主进程是否可以继续安全或是否变为不稳定状态?

具有两个项目的Visual Studio解决方案(控制台应用程序和类库).

在此输入图像描述

using System;
using System.Reflection;
using System.Runtime.ExceptionServices;
using System.Security;

namespace StackOverflowQuestion
{
    class Program
    {
        static void Main(string[] args)
        {
            new Tester().RunTest();
        }
    }

    class Tester
    {
        public void RunTest()
        {
            var myTestAppDomain = AppDomain.CreateDomain("My Test AppDomain");
            var loader = (Loader)myTestAppDomain.CreateInstanceAndUnwrap(typeof(Loader).Assembly.FullName, typeof(Loader).FullName);
            TestHandleProcessCorruptedStateExceptions(loader, myTestAppDomain);

            // how can I make sure process doesn't crash when AppDomain "My Test AppDomain" crashes
            Console.WriteLine("This won't be written to console unless [HandleProcessCorruptedStateExceptions] attribute is present...");

            // keep console window open
            Console.ReadKey(); …
Run Code Online (Sandbox Code Playgroud)

c# worker-process appdomain access-violation corrupted-state-exception

5
推荐指数
0
解决办法
135
查看次数