2012-11-09 49 views
5

我有一个调用一个C#应用程序:为什么我的32位应用程序无法访问32位注册表配置单元?

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

它被设置为目标的x86,当我运行它,我可以从任务管理器中看到,这是一个32位进程。然而,这行代码奇怪地转向HKCU \ Software \ MyApp的64位配置单元,而不是HKCU \ Software \ Wow6432Node \ MyApp的32位配置单元。有任何想法吗?

我还启动了Powershell的两个实例,一个32位和一个64位,并运行下面的代码,但都返回64位Hive的值。

get-itemproperty -Path Registry::HKEY_CURRENT_USER\Software\MyApp 

任何想法可能在这里出了什么问题?我已三重检查了32位和64位配置单元的注册表设置是否与注册表不同。

+0

它可能是CRL检测到你正在使用64位计算器并进入配置单元。只是猜测虽然! – FrostyFire

回答

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位版本不同的注册表项和值。 还有 也是没有重定向或反映的共享注册表项。

相关问题