2011-11-25 33 views
3

我一直在InstallScript中遇到问题,以获取32位和64位安装的注册表项列表。RegDBQueryKey无法同时列出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的密钥。

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

回答

3

设置该标志您的通话之前RegDBQueryKey:

REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY; 

这将禁用默认转发到关键的64位版本,并给你的32位版本。它适用于全球,所以当你完成后一定要重置标志使用:

REGDB_OPTIONS = REGDB_OPTION_USE_DEFAULT_OPTIONS; 
+0

+1为底线......以及提醒_reset国旗done_时。我遇到的这个问题导致我回答这个问题和答案是因为没有做到这一点! – J0e3gan