RegDBQueryKey无法同时列出32位和64位密钥的密钥

时间:2011-11-25 06:59:05

标签: registry 64-bit 32-bit installscript

我在InstallScript中遇到了一个问题,即获取32位和64位安装的注册表项列表。

我的机器是Windows Server 2008 64位。我可以在这台机器上安装SQL Server 2008 32位版本或64位版本。

现在在设置过程中,我需要知道是否安装了任何一个SQL Server版本。

根据我的理解,

  • 64位计算机上的64位应用程序存储在Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall
  • 64位计算机上的32位应用程序存储在Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall

我编写了一个函数,应该使用RegDBQueryKey函数搜索这两个位置以进行SQL Server安装。

即使我将"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"传递给RegDBQueryKey,它也会列出Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall的键。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

在调用RegDBQueryKey之前设置此标志:

REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY;

这将禁用默认转发到64位版本的密钥,并为您提供32位版本。它适用于全球,所以当您完成后,请确保使用以下方式重置标志:

REGDB_OPTIONS = REGDB_OPTION_USE_DEFAULT_OPTIONS;