0

尝试读取注册表但仅影响 Windows 2008 SBS x64 操作系统时,我遇到了奇怪的不一致。虽然我还没有尝试过一切,但 Windows 7 x64 可以工作

撇开那些我根本不应该Wow6432Node在我的代码中使用的评论(我现在已经相应地更改了我的生产代码),以下看起来很奇怪:

Dim baseKey As RegistryKey
Dim regKey As RegistryKey

baseKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64)
regKey = baseKey.OpenSubKey("SOFTWARE", False)
regKey = regKey.OpenSubKey("Wow6432Node", False)
regKey = regKey.OpenSubKey("Parker Technologies", False)
regKey = regKey.OpenSubKey("CaptureIT", False)
regKey = regKey.OpenSubKey("3.0", False)
'the above all opens ok on both windwows 7 x64 and 2008 SBS x64

regKey = baseKey.OpenSubKey("SOFTWARE\Wow6432Node\Parker Technologies", False)
'this opens ok on win 7 x64 but fails to open the key on 2008 SBS x64 
'(although it does exist as it has just been opened above)

有人可以解释为什么这种行为在 windows7 和 SBS 中有所不同吗?

4

1 回答 1

1

最可能的解释是您有一个 32 位进程,因此注册表重定向在起作用。这会将您重定向到 Wow6432Node 部分,然后您的后续重定向导致找不到密钥。

您永远不应该将 Wow6432Node 硬编码到您的应用程序中。使用重定向器,它是你的朋友。如果您必须指定注册表的特定视图,请使用 .net 4 RegistryView 枚举。使用 RegistryView 枚举将确保使用正确的位置,无论您的进程是 32 位还是 64 位。

于 2011-12-22T13:56:49.297 回答