在Windows注册表中,什么是“LegacyDisable”字符串值以及它究竟是做什么的?

Modified on: Sat, 02 Mar 2019 20:00:02 +0800

在Windows注册表中,将LegacyDisable字符串值添加到键中的目的是指示Windows忽略键,其值及其任何子键和子值,从而有效地禁用它。

例如,将LegacyDisable字符串值添加到以下键:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\opennewwindow

...禁用opennewwindow,从Windows资源管理器的上下文菜单中删除“在新窗口中打开”项。 CCleaner的上下文菜单清理工具也使用LegacyDisable目的

但是,关于字符串值的文档似乎不存在;无论是在这里还是通过谷歌,我都无法找到任何记录它的东西,所以我对它的来源,是否禁用注册表键以及为什么没有记录它感到困惑

禁用注册表项LegacyDisable的目的是什么?

当用于禁用注册表项时,它的行为与CCleaner采用的其他方法有何不同 - 将纯文本添加到字符串值的十六进制数据中?为什么CCleaner采用这两种方法?

作者:,Hashim

最佳答案

我在LegacyDisable上做了一些关于下面详细介绍的调查工作。

Microsoft在本文中记录了此方法
动词和文件关联 - 注册动词以实现向后兼容性

  

某些应用程序可能会在注册表中搜索动词键
  不再使用。为此目的,这些键可以保留在
  注册表中添加了对动词的LegacyDisable值
  key,告诉系统动词不是实际动词,但是
  存在仅仅是为了向后兼容。

  
  

此处显示LegacyDisable值的使用。价值只需要
  出席;它可以是任何值类型(尽管REG_NONE最多
  适当的)并且不需要任何与之相关的数据。
  如果存在数据,则忽略它。

* KEY_CLASSES_ROOT
  *  Application
    *   shell
       *  open
            (Default) = &Open
            LegacyDisable
            *  command
                (Default) = command line 

LegacyDisable的使用似乎仅限于禁用shell-context动词,
因为它总是只在这种情况下描述。

实用程序ShellMenuView使用此方法
“Windows 98不支持此注册表项”,
所以它似乎起源于Windows NT。

我发现在两本书中引用了这种方法:

  • Windows 7 Annoyances(2010),第179页:
  

查看您要删除的上下文菜单项?只需删除
  相应的动作键(例如,New,Open,Print),它将消失
  立即。更好的是,将一个名为LegacyDisable的字符串值添加到
  用于在Windows资源管理器中隐藏它而不必删除任何内容的键。

  • Windows注册表故障排除,第100页
  

在这些位置下,您将看到第三方的子键
  已将自身插入上下文菜单的软件。有
  几种处理它们的方法。您可以删除键以删除它们
  完全。要强制它们仅在Shift +右键单击时显示,请添加
  每个字符串值调用“Extended”,或者将它们保留在
  注册表但禁用它们,添加一个名为“LegacyDisable”的字符串值。

我认为这是关于可以找到的所有有用信息
LegacyDisable。

至于为什么CCleaner将这种方法与其他方法一起使用
破坏密钥,我只能做两个猜想:

  1. 代码由两个不同的程序员编写,其中一个没有
    了解LegacyDisable
  2. 密钥销毁方法用于LegacyDisable的情况
    不工作(不是shell-context动词)。
  3. 醇>
作者:,harrymc

相关问答

添加新评论