RegDBKeyExists函数无法在Installshield中读取

时间:2011-02-10 06:19:53

标签: installshield-2011

我们在Installshiled 2008专业版中开发了MSI软件包,项目类型为Installscript MSI,最近我们购买了2011并将我们的项目升级到2011年。

在早期版本中,我们用于检查Microsoft SQL Express的注册表项,其路径为

**HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL**

现在有一个新的需求来创建一个64位O.S.的包,因为O.S.是64位,但64位SQL Express的注册表路径是

**HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\Instance Names\SQL**

注册表函数RegDBKeyExists用于检查SQL注册表的存在,但函数返回的负数为 -2147483646 ,但无法读取。

设置选项REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY无济于事,因为我们没有阅读64位相关的注册表Hive。

2 个答案:

答案 0 :(得分:1)

不要太担心;如果没有额外的代码,Registry Reflection可以做到正确。当32位应用程序访问64位计算机上的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL时,它将被重定向并查看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\Instance Names\SQL(除非它通过KEY_WOW64_64KEY - 相当于REGDB_OPTION_WOW64_64KEY)。

如果您将Wow6432Node密钥硬编码到查询中,此方案将倾向于查看包含HKLM\Software\Wow6432Node\Wow6432Node\...的路径下的密钥,并且无法找到您要查找的密钥。

答案 1 :(得分:0)

作为Michael的回答和我的评论(即问题)的后续内容,这是一个用于切换注册表反射的InstallScript函数:

 <style name="customButtonStyle" parent="@android:style/Widget.Button">
        <!-- Customize your button style here. -->
 </style>