删除 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)分隔指定位数的数据

注意

这些资源可能在某些语言和国家/地区不可用。