5

我有一个 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 不同。

4

1 回答 1

4

因为您正在访问一个共享的密钥 (HKCU\Software),而不是重定向。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspx和(更具体地说)http://msdn.microsoft.com/en-us/库/windows/desktop/aa384253(v=vs.85).aspx

从第一个链接(强调我的):

在 64 位 Windows 上,部分注册表项分别为 32 位应用程序和 64 位应用程序存储,并使用注册表重定向器和注册表反射映射到单独的逻辑注册表视图,因为 64 位版本的应用程序可能使用与 32 位版本不同的注册表项和值。还有一些未重定向或反映的共享注册表项。

于 2012-11-09T02:21:01.537 回答