如何让Delphi读取特定的注册表项?

时间:2013-12-27 14:40:41

标签: delphi winapi registry delphi-xe4 wow64

我在运行Windows 7,64位的计算机上安装了Delphi XE4。我试图遍历以下两个注册表项:

  1. HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall
  2. HKLM \ SOFTWARE \ Wow6432Node \微软\的Windows \ CurrentVersion \卸载
  3. 我编写了一个简单的程序,遍历上述每个注册表项中的所有子项。当我将目标系统设置为32Bit时,XE4会忽略注册表项#1,而是从注册表项#2中获取信息。当我将目标系统设置为64Bit时,XE4将两个注册表项都识别为独立且不同,并返回两组不同的数据。

    当目标系统设置为32Bit时,为什么XE4会忽略注册表项#1并替换键#2?有没有办法在定位32Bit系统时读取#1键?

    这让我觉得XE4-32Bit还有其他一些注册表项可以执行一些隐藏的替代。

1 个答案:

答案 0 :(得分:2)

这与Delphi无关。这完全是关于Windows,特别是在64位Windows上运行32位进程的WOW64仿真器。

在64位计算机上在WOW64下运行的32位进程显示某些注册表项的32位视图。这由registry redirector透明地处理。请遵循该MSDN链接以了解有关重定向器的更多信息,并特别注意该部分,告诉您永远不要直接访问Wow6432Node。

您可以看到注册表的不同视图:

  • 32位进程可以使用KEY_WOW64_64KEY标志访问64位注册表视图。
  • 64位进程可以使用KEY_WOW64_32KEY标志访问32位注册表视图。

MSDN上详细介绍了这一点:Accessing an Alternate Registry View

在Delphi中,您可以在creating TRegistry实例或Access属性时指定这些标记。