【发布时间】:2018-10-25 02:54:47
【问题描述】:
我需要设置一个 docker 容器,其中一个遗留应用程序需要连接到一个 MS-Access 2003 DB。 DB 的连接字符串嵌入在应用程序本身中,因此无法更改。所以我也不能将提供者更改为ACE.OleDb。
我已经基于……创建了 docker 镜像
- microsoft/dotnet-framework
- microsoft/windowsservercore
- microsoft/mssql-server-windows-express
…但在容器上运行旧版应用程序时,我总是得到相同的结果。
“Microsoft.Jet.OLEDB.4.0”提供程序未在本地计算机上注册。
我还尝试在容器中使用以下命令在 SysWow64 中注册msjetoledb40.dll ...
C:\Windows\SysWow64\regsvr32 Msjetoledb40.dll
...但似乎也不起作用。
我还安装了 32 位和 64 位的 Microsoft Access Database Engine Redistributable(2007、2010 和 2016)(AccessDatabaseEngine.exe 和 AccessDatabaseEngine_X64.exe),但总是遇到与上述相同的错误。
2007 Office System Driver: Data Connectivity Components
Microsoft Access Database Engine 2010 Redistributable
Microsoft Access Database Engine 2016 Redistributable
有什么想法吗?
【问题讨论】:
-
嗨,David,我开发了一个简单的应用程序,可以连接到 MS-Access-2003 db,我可以在其中更改连接字符串。 Jet.Oledb 失败,Ace.Oledb 提供程序成功。但正如我在原帖中提到的,我无法更改旧版应用程序的连接字符串,因为它嵌入在 dll 中。我知道这可以在 64 位操作系统中运行,因为它在使用 Windows 10 64 位的开发计算机中运行良好,并且我的 dev.computer 已经在 SysWow64 中注册了 msjetoledb40.dll。这是真正的问题,因为我无法在任何 Win-Docker-Container 甚至 Hyper-V WinServerCore VM 中注册此 dll。发送