gpt4 book ai didi

.net - 我可以防止另一个 AppDomain 中未捕获的异常关闭应用程序吗?

转载 作者:行者123 更新时间:2023-12-02 09:18:53 24 4
gpt4 key购买 nike

我遇到了一个行为不当的库的问题,它在终结器中抛出异常,这当然会导致应用程序崩溃。

为了避免这种情况,我尝试在其自己的 AppDomain 中加载该库,但异常仍然浮出水面并导致应用程序崩溃。

正如 MSDN 上所述,注册到 AppDomain.UnhandledException 并不能阻止异常冒泡,但令我感到非常惊讶的是,没有其他方法可以在“子应用程序域”。

插件主机或使用 AppDomains 沙箱潜在有害代码的应用程序如何阻止未处理的异常?事实上可能吗?

注意:我已经有了另一种解决方法,即描述的 here 。 。错误的终结器位于一个长期存在的对象上,该对象似乎仅在关闭期间收集,因此足以向用户隐藏此“虚假”错误。不过,我发现这种解决方法很脆弱,因为它要么会隐藏其他真正的错误,要么如果较早收集对象,就会冒着毁掉我的应用程序的风险。

最佳答案

AppDomain 很好,因为您可以放弃程序状态,但仍然存在线程已死的问题。这种情况发生在终结器线程上是致命的,CLR 将无追索权地中止该进程。

唯一的“修复”是在其自己的进程中运行该组件。您可以使用 Process.Kill() 将其射入头部,以防止终结器线程在进程退出时运行。使用 .NET 支持的进程间通信机制之一与其通信。套接字、命名管道、Remoting 或 WCF。祝你好运。

关于.net - 我可以防止另一个 AppDomain 中未捕获的异常关闭应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3906282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com