我有一个调用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不同。
答案 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位版本不同的注册表项和值。的有 也是未重定向或反映的共享注册表项。