You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者袁文涛

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:49:22