是否可以抑制“AddInProcess.exe已停止工作”?

时间:2011-09-18 04:02:58

标签: .net stack-overflow maf

我试图通过在自己的进程中启动的MAF插件中执行它来沙箱化潜在的恶意代码:

    var x = token.Activate<Ix>(new AddInProcess(), AddInSecurityLevel.Internet);

这似乎工作得很好,除了在处理StackOverflowException时会显示一个对话框:“AddInProcess.exe已停止工作”。这使得测试非常困难

    [TestMethod]
    public void TestStackOverflow() {
        var host = new Host(Environment.CurrentDirectory
            + "/../../../build/pipeline");
        host.Run("foo");
        host.Tick();
        Thread.Sleep(1000);
        host.Monitors.Count.Should().Be(0);
        host.Shutdown();
    }

如果在睡眠过期之前单击“关闭”按钮,则测试成功,否则失败。这表示在按下“关闭”按钮之前,该过程不会退出。鉴于我期待这个过程终止,如何在不提高此对话框的情况下确保它完成?我已经尝试将我的操作系统设置为“从不检查解决方案”,但对话框仍然出现。将其设置为“自动检查解决方案”可以避免对话,但需要十秒钟,这是不可取的...我宁愿避免操作系统设置。

AddInProcess.exe has stopped working

1 个答案:

答案 0 :(得分:4)

您可以在插件流程中的某处调用SetErrorMode,如下所示:

    [Flags]
    enum ErrorModes : uint {
        SYSTEM_DEFAULT = 0x0,
        SEM_FAILCRITICALERRORS = 0x0001,
        SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
        SEM_NOGPFAULTERRORBOX = 0x0002,
        SEM_NOOPENFILEERRORBOX = 0x8000
    }

    [DllImport( "kernel32.dll" )]
    static extern ErrorModes SetErrorMode( ErrorModes uMode );

    var em = SetErrorMode( 0 );
    SetErrorMode( em | ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOOPENFILEERRORBOX );