删除 Windows 注册表反射
平台
客户端 - Windows 7
服务器 - Windows Server 2008 R2
对功能的影响
严重性 - 低
频率 - 低
说明
注册表反射过程会复制两个注册表视图之间的注册表项和值,使其保持同步。在之前安装的 64 位 Windows 中,此过程反映了 32 位和 64 位视图之间的重定向注册表项的子集。 但是,实现此项导致了注册表状态有些不一致。 有关注册表反射的更多详细信息,请参阅注册表反射。
从 Windows 7 开始,我们已完全删除了注册表反射,并合并了以前反射的项:
- HKEY_LOCAL_MACHINE\Software\Classes
- HKEY_LOCAL_MACHINE\Software\Microsoft\COM3
- HKEY_LOCAL_MACHINE\Software\Microsoft\EventSystem
- HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
- HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc
- HKEY_USERS\*\Software\Classes
- HKEY_USERS\*_Classes
实际上,这提供了相同的反射行为,因为对这些项的更改立即可用于 32 位和 64 位应用程序。
有条件地反映的项会保持拆分状态:
- HKEY_LOCAL_MACHINE\Software\Classes\CLSID
- HKEY_LOCAL_MACHINE\Software\Classes\Interface
- HKEY_USERS\*\Software\Classes\CLSID
- HKEY_USERS\*\Software\Classes\Interface
- HKEY_USERS\*_Classes\CLSID
- HKEY_USERS\*_Classes\Interface
它们用于保留不应该在 32 位和 64 位应用程序之间共享的数据。
表现形式
在仍然重定向上述列表中的 CLSID 和接口密钥时,不会再反映这些 CLSID 和接口密钥。 尽管这是大多数情况下所需的行为,但应用程序可能会依赖其在 Vista 中反映的行为。
允许应用程序控制反射(RegDisableReflectionKey 和 RegEnableReflectionKey)的函数在 Windows 7 中不进行任何操作。
减轻影响
COM 是注册表反射的主要使用者。 为适应此更改,已更新 COM 和其他使用者。 此更改不会影响使用标准 COM API 的应用程序。
解决方案
如果你依赖于注册表反射来同步 32 位和 64 位视图,请应用以下选项之一:
在安装期间显式在这两个视图中创建项
将项移出反射项的范围
查询反射项时检查注册表的两个视图
注意:无法组合 KEY_WOW64_32KEY和KEY_WOW64_64KEY 标志
如果正在依赖 RegDisableReflectionKey 函数禁用注册表反射,请应用以下选项之一:
- 在安装期间显式在这两个视图中创建项
- 将项移出反射项的范围
- 使用特定于平台的子项(如 x86、amd64 和 ia64)分隔指定位数的数据
其他资源的链接
注意
这些资源可能在某些语言和国家/地区不可用。