如何在InstallShield的Setup.rul中安装64位ODBC?遇注册表写入异常
解决InstallShield中64位ODBC DSN写入注册表被重定向的问题
这个问题我之前做ODBC配置的时候也踩过坑,核心原因是Windows的注册表重定向机制和InstallShield工程的默认行为冲突了,导致你写的64位注册表路径被自动转到了Wow6432Node下面。下面给你几个可行的解决办法:
方法1:把InstallShield工程改成64位目标平台
如果你的安装包只需要支持64位系统,这是最简单的方案:
- 打开你的InstallShield工程,找到「General Information(常规信息)」页面
- 在「Product Configuration(产品配置)」里,把目标平台从「32-bit」切换为「64-bit」
- 重新编译安装包后,所有对
HKLM\SOFTWARE的注册表写入都会直接指向64位注册表路径,不会被重定向
方法2:在32位安装包中手动切换注册表视图
如果你需要兼容32位系统,必须保留32位安装包,那就要在代码里手动指定访问64位注册表:
在你的64位DSN安装代码前,加上切换注册表视图的调用,写完后再切回32位(如果后续还要操作32位注册表)。修改后的代码如下:
//install 64-bit odbc dsn // 切换到64位注册表视图 RegDBSetDefaultRoot(REGDB_ROOT_HKLM); RegDBSet64BitView(REGDB_VIEW_64BIT); szFilePath="\\SOFTWARE\\ODBC\\ODBC.INI\\"^szDemoDB; RegDBSetKeyValueEx(szFilePath,"Database",REGDB_STRING, szDemoDB,-1); RegDBSetKeyValueEx(szFilePath,"Driver",REGDB_STRING, "c:\\Windows\\System32\\sqlncli11.dll",-1); RegDBSetKeyValueEx(szFilePath,"Server",REGDB_STRING,"(localdb)\\\\.\\\\v11.0",-1); szFilePath="\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources"; RegDBSetKeyValueEx(szFilePath,szDemoDB,REGDB_STRING, "SQL Server Native Client 11.0",-1); // 切换回32位视图(如果后续有32位注册表操作需求) RegDBSet64BitView(REGDB_VIEW_32BIT);
额外验证小贴士
- 安装完成后,用默认的regedit.exe(64位注册表编辑器)去检查
HKLM\SOFTWARE\ODBC\ODBC.INI路径,不要用C:\Windows\SysWOW64\regedit.exe(32位编辑器),否则会看到重定向后的Wow6432Node内容,误以为没成功。 - 确保安装包以管理员权限运行,否则可能没有写入HKLM注册表的权限。
内容的提问来源于stack exchange,提问作者袁文涛
相关产品推荐
相关产品推荐

