我有一个安装程序,可以创建多个ODBC条目,一个作为用户DSN,一个作为系统DSN。
安装在Windows XP上运行正常。但是当我在64位Windows 7上进行安装时,它会将注册表项安装在错误的位置。
它应该在以下位置安装系统条目:
HKLM\Software\ODBC\ODBC.INI\Castit
但是将它们安装在:
HKLM\Software\Wow6432Node\ODBC\ODBC.INI\Castit
如果我手动创建ODBC条目然后检查注册表,则可在以下位置找到条目:
HKLM\Software\ODBC\ODBC.INI\Castit
我甚至使用HKLM32尝试强制它在正确的位置安装它。但是,如果我使用HKLM64,那么它将它们放在Win 7和Win 8上的正确位置,但是在XP上安装错误。
所以问题是:我如何指定一个可以在XP和Win 8上运行的ODBC条目,并希望它们之间的所有内容。
答案 0 :(得分:1)
在64位系统上有2个注册表视图:" 32位"和" 64bit"。
32位系统当然只有" 32bit"图。
32位系统上的HKLM \ Software 等于64位系统上的 HKLM \ Software \ Wow6432Node 视图。
因此,您的密钥是正确的,因为默认情况下,即使在64位系统上,Inno Setup也设置为使用32位视图。
对于多个Windows,您可以检查它是否为64位:
if IsWin64 then
// Write 64bit registry keys
else
// Write 32bit registry keys
使用适当的RootKey值: HKLM64 用于64位密钥, HKLM32 用于32位密钥,例如:
RegWriteStringValue(HKLM64, 'Software\ODBC\ODBC.INI\Castit','Key', 'Value'));