代码之家  ›  专栏  ›  技术社区  ›  tvanfosson

当安装程序没有创建标准DSN时,如何在64位服务器2008上使用32位ODBC驱动程序?

  •  26
  • tvanfosson  · 技术社区  · 15 年前

    我遇到了一些第三方软件的问题,我们用它来跟踪计算机实验室中软件许可证的使用情况。我们最近将该应用程序迁移到64位服务器2008,在收到该公司的保证后,它是兼容的,并运行了一些初步测试,表明该应用程序在64位环境中工作。不幸的是,做测试的人没有测试我拥有的几个应用程序的功能,这些应用程序依靠访问数据来对数据进行实时和后处理来生成一些报告。

    结果发现,应用程序没有64位的ODBC驱动程序来访问其内部数据,并且无法使用64位的SQL Server ODBC驱动程序将其数据导出到SQL Server。它包含并安装了32位ODBC驱动程序,但它将其安装为用户数据源,而不是系统数据源,这意味着运行Live Collection的Windows服务找不到它。我也无法创建系统DSN,因为数据源管理控制台找不到已安装的驱动程序。

    我的问题是如何为这个连接配置数据源,我可以从系统帐户下运行的C/.NET Windows服务访问它?

    既然我已经找到了一种方法,我将提供我的解决方案作为答案(与 FAQ 如何回答自己的问题)。

    类似: What software exists for bridging a 64-bit ODBC app to a 32-bit ODBC driver on windows?

    3 回复  |  直到 9 年前
        1
  •  41
  •   tvanfosson    15 年前

    事实证明,您可以使用 C:\Windows\SysWOW64\odbcad32.exe . 我的解决方案是创建32位ODBC连接作为系统DSN。这仍然不允许我连接到它,因为.NET找不到它。在无意义和无结果的搜索之后,找到如何获取odbcconnection类以在 正确的地方 我偶然发现一个网站建议修改注册表以解决另一个问题。

    我最终直接在下面创建了ODBC连接 HKLM\Software\ODBC .我在sysw6432键中查找了使用32位版本的ODBC管理工具设置的参数,并在标准位置重新创建了该参数。但是,我没有为驱动程序添加条目,因为应用程序的标准安装程序也没有安装这个条目。

    在手工创建条目之后,我启动了我的Windows服务,一切都很愉快。

        2
  •  2
  •   Parag Vyas    12 年前

    打开IIS管理器,选择应用程序池,选择正在使用的应用程序池,单击右侧菜单中的高级设置。在“常规”下,将“启用32位应用程序”设置为“真”。

        3
  •  2
  •   Baddack    9 年前

    很多答案都很古老,所以我想我会更新一个我认为有帮助的解决方案。

    我们的问题与OP的问题类似,我们将32位XP机器升级到64位Windows7,并且我们的应用软件使用32位ODBC驱动程序,无法写入我们的数据库。

    事实证明,有两个ODBC数据源管理器,一个用于32位,一个用于64位。所以我必须运行32位版本,该版本可以在c:\windows\sysw64\odbcad32.exe中找到。在ODBC数据源管理器中,我可以转到系统DSN选项卡,并使用添加按钮将我的驱动程序添加到列表中。(您可以检查“驱动程序”选项卡以查看可以添加的驱动程序列表,如果您的驱动程序不在此列表中,则可能需要安装它)。

    下一个问题是我们运行的软件被编译成使用“任何CPU”。这将看到操作系统是64位的,所以它将查看64位的ODBC数据源。所以我不得不强迫程序编译成一个x86程序,然后告诉它查看32位的ODBC数据源。要将程序设置为x86,请在Visual Studio中转到项目属性,在顶部的“生成”选项卡下有一个平台下拉列表,然后选择x86。如果没有源代码并且无法将程序编译为x86,则可以右键单击Program.exe并转到“兼容性”选项卡,然后选择适合您的兼容性。

    一旦我添加了驱动程序,程序指向正确的驱动程序,所有的工作都会像以前一样。希望这能帮助任何使用旧软件的人。