HKEY_CURRENT_USER不会发生注册表重定向

时间:2016-10-21 06:31:02

标签: c# registry

我有以下代码:

RegistryKey objRegKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true);

我在HKEY_CURRENT_USER\SOFTWARE\MySettings\Dwm\Preferences下面有一个注册表项,所以这很好。

当我将上述代码更改为从本地计算机而不是当前用户读取时:

RegistryKey objRegKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true);

并在以下位置创建以下注册表: HKEY_LOCAL_MACHINE\SOFTWARE\MySettings\Dwm\Preferences

代码返回null。我理解的原因是由于64位操作系统上32位应用程序的注册表重定向,它尝试从以下位置读取注册表: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432NODE\MySettings\Dwm\Preferences 并且由于注册表不存在,因此返回null。 问题是为什么重定向只发生在HKEY_LOCAL_MACHINE而不发生在HKEY_CURRENT_USER

1 个答案:

答案 0 :(得分:1)

注册表重定向不是二进制选项 - 是否存在。有时你希望 32位和64位应用程序具有相同的(部分)注册表“视图”,而在其他情况下则不具备。

这就是记录特定keys affected by redirection的原因。 HKEY_CURRENT_USER本身是共享的,HKEY_CURRENT_USER\Software也是如此。但是,HKEY_CURRENT_USER\Software\Classes\CLSID(包括COM组件注册数据(必须是32/64位拆分))会执行重定向。

或者,换句话说,如果注册表重定向是通用的,那么您将不需要涉及Wow6432Node等的所有卷积。您只需要一个32位注册表和一个64位注册表注册表中。