2

我的 32 位应用程序在 64 位 Windows 7 上运行。我正在尝试访问注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall。我可以在 regedit 中看到Uninstall默认 64 位注册表视图中的键下方有几个子键(Dropbox 在该位置创建一个键,以及 Google Chrome)。Uninstall但是,在 32 位注册表视图中确实没有键。实际上,在 regedit 下面只有一个Active SetupHKEY_CURRENT_USER\Software\Wow6432Node\Microsoft。下面甚至没有Windows子键Microsoft

但是,当我的 32 位应用程序尝试访问 32 位注册表视图时HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall,我会从 64 位视图中获取密钥。这是为什么?

即使是标志KEY_WOW64_32KEY在这里也无济于事。我们的代码需要知道结果是来自 32 位视图还是 64 位视图。

我们的代码还可以访问密钥的 32 位和 64 位视图,HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall我在那里看不到这个问题。不同之处在于 HKLM 的 32 位视图有Uninstall密钥,而 HKCU 的 32 位视图没有。

我知道 WoW64 的注册表重定向,但这似乎不同。我在 MSDN 上找不到任何有用的信息。有人可以对此有所了解吗?

4

2 回答 2

4

这是记录在案的,但只是间接的。此MSDN 页面列出HKLM\Software了重定向和HKCU\Software共享。

注意:在此上下文中, redirect意味着有两个注册表视图,一个用于 32 位,一个用于 64 位(换句话说:Wow6432Node子项存在并被使用),而共享意味着只有一个视图 32-位和 64 位进程。

是的,有趣的是HKEY_CURRENT_USER\Software\Wow6432Node存在。正如 OP 所提到的,在其下方只有一个子键Microsoft\Active Setup\Installed Components- 这可能是因为 Microsoft 的 Active Setup 代码的作者Wow6432Node在其注册表 API 调用中错误地使用了 as 子键路径,而不是samDesired通过RegOpenKeyEx.

于 2014-06-25T14:40:31.950 回答
0

我正在根据我目前收到的评论结束这个问题,对此没有官方确认。所以此时在 64 位机器上基本上没有 KKEY_CURRENT_USER 的 32 位注册表。

于 2012-08-27T14:36:07.730 回答