我有以下代码:
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
?
答案 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位注册表注册表中。