为什么我的32位应用程序不能访问32位注册表配置单元?

时间:2012-11-09 02:06:46

标签: c#

我有一个调用C#的应用程序:

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

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

我还启动了Powershell的两个实例,一个32位和一个64位,然后运行以下但两者都返回64位配置单元的值。

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

任何想法可能会出错?我已经三次检查过,32位和64位配置单元的注册表设置也与regedit不同。

1 个答案:

答案 0 :(得分: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位版本不同的注册表项和值。的有   也是未重定向或反映的共享注册表项。