在 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要用这种方法和另一种销毁密钥的方法一起使用,我只能做出两种猜测:
- 该代码是由两个不同的程序员编写的,其中一个不知道 LegacyDisable
- 密钥销毁方法用于 LegacyDisable 不起作用的情况(不是 shell 上下文动词)。