更改终结器策略

Posted

技术标签:

【中文标题】更改终结器策略【英文标题】:Changing the finalizer policy 【发布时间】:2014-02-27 14:56:31 【问题描述】:

我读到了finalizers at Microsoft,发现了这个有趣的句子

如果 Finalize 或 Finalize 的覆盖引发异常,并且 运行时不是由覆盖默认值的应用程序托管 策略,运行时终止进程并且没有活动的 try-finally 块或终结器被执行。

我已经用谷歌搜索了如何更改默认策略,但我仍然感到困惑:

他们在谈论Default Security Policy 吗?但我在那里找不到任何与终结器相关的东西。 Cache policy 似乎也不相关 我认为 ASP 密码策略在这里没有帮助

Microsoft 在有关终结器的链接文章中谈论的是哪种政策?我怎样才能改变它?我可以为当前正在执行的应用程序以编程方式更改此策略吗?

注意:我不想更改它以恢复 .NET 1.1 终结器行为。我只是好奇。在分析别人的错误时,了解这些细节总是好的。

【问题讨论】:

【参考方案1】:

当他们讨论时:

运行时不是由覆盖默认策略的应用程序托管

他们谈论的是使用CLR Hosting Interfaces 托管CLR 并允许托管代码在其中运行的非托管应用程序。参见例如SQL Server 及其CLR integration。

他们不是在谈论正在运行的托管应用程序可以更改的设置。


ICLRPolicyManager::SetUnhandledExceptionPolicy,具体来说:

指定发生未处理异常时公共语言运行时 (CLR) 的行为。

默认情况下,CLR 是所有未处理异常的最终处理程序,其默认行为是终止进程。主机可以通过将策略值设置为eHostDeterminedPolicy 来更改此行为。该值允许主机实现其自己的默认行为,就像 CLR 的早期版本一样。

【讨论】:

以上是关于更改终结器策略的主要内容,如果未能解决你的问题,请参考以下文章

Windows sever 2012登录密码过期,同时管理员用户没有更改密码权限。如何解决?

Server 2019域控更改密码的复杂性+密码最小长度

windows server 2012 更改网络位置

更改默认更改检测策略

如何更改hibernate的默认获取策略?

win2008更改密码复杂度策略