在 Windows 注册表中,“LegacyDisable”字符串值是什么,它到底起什么作用?

在 Windows 注册表中,“LegacyDisable”字符串值是什么,它到底起什么作用?

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\opennewwindow

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

但是,关于该字符串值的文档似乎不存在;无论是在这里还是通过谷歌,我都无法找到任何关于它的内容,所以我很困惑它来自哪里,是否禁用注册表项就是它的全部目的,以及为什么没有记录它。

禁用注册表项LegacyDisable的唯一目的吗?

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

答案1

我对 LegacyDisable 做了一些侦查工作,下面详细介绍。

微软在文章中记录了这种方法 动词和文件关联 - 注册动词以实现向后兼容

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

此处显示了 LegacyDisable 值的使用。该值只需存在即可;它可以是任何值类型(尽管 REG_NONE 最合适),并且不需要任何与之关联的数据。如果存在数据,则会被忽略。

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

LegacyDisable 的用途似乎仅限于禁用 shell 上下文动词,因为它始终仅在此上下文中描述。

此方法由实用程序使用Shell菜单视图其中说“Windows 98 不支持此注册表项”,所以看起来它起源于 Windows NT。

我发现有两本书中提到了这种方法:

  • Windows 7 烦恼 (2010),第 179 页:

看到要删除的上下文菜单项?只需删除相应的操作键(例如,新建、打开、打印),它就会立即消失。更好的方法是,向该键添加一个名为 LegacyDisable 的字符串值,以将其隐藏在 Windows 资源管理器中,而无需删除任何内容。

  • Windows 注册表疑难解答,第 100 页

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

我认为这就是有关 LegacyDisable 的所有有用信息。

至于为什么CCleaner要用这种方法和另一种销毁密钥的方法一起使用,我只能做出两种猜测:

  1. 该代码是由两个不同的程序员编写的,其中一个不知道 LegacyDisable
  2. 密钥销毁方法用于 LegacyDisable 不起作用的情况(不是 shell 上下文动词)。

相关内容