我们在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。
答案 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>