为什么我的32位应用程序无法访问32位注册表项?

5

我有一个调用如下代码的C#应用程序:

Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\MyApp")                

它被设置为针对x86,当我运行它时,从任务管理器可以看出它是一个32位进程。然而,那行代码奇怪地去到了HKCU\Software\MyApp的64位hive,而不是HKCU\Software\Wow6432Node\MyApp的32位hive。有什么想法吗?
我还启动了两个PowerShell实例,一个是32位的,另一个是64位的,并运行了下面的命令,但两者都返回64位hive中的值。
get-itemproperty -Path Registry::HKEY_CURRENT_USER\Software\MyApp 

这里有什么可能出了问题吗?我已经三次检查了32位和64位注册表设置,并且它们与regedit中的不同。


可能是CRL检测到您正在使用64位计算机并进入了该节点。只是猜测! - FrostyFire
1个回答

4
因为你正在访问一个共享的关键路径(HKCU\Software),而不是被重定向的。请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx 和 (更具体地) http://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v=vs.85).aspx 从第一链接中(重点在于我):
在64位Windows上,注册表条目的部分内容是为32位应用程序和64位应用程序分别存储的,并使用注册表重定向和注册表反射映射到不同的逻辑注册表视图中,因为64位版本的应用程序可能使用与32位版本不同的注册表键和值。也有一些不被重定向或反映的共享注册表键。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接