1

我正在开发一个需要能够连接到 MS Access 数据库并使用存储在那里的一些数据库对象的 C# 应用程序。

由于后来可能需要对 Access 相关代码进行一些小改动的人主要熟悉 VBA 和 DAO,因此我们决定使用 ACEDAO.dll(通过 Microsoft.Office.Interop.Access.Dao PIA),为了使语法尽可能熟悉。

参考提到的 PIA,我可以轻松地在 Visual Studio 2015 中使用必要的 Access 特定类型,并且应用程序编译得非常好。但是,在开始调试过程时,我很快遇到了异常:

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll

Additional information: Retrieving the COM class factory for component with CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} failed due to the following error: 80040154 class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

虽然我安装了 Office 2013,但似乎引用的 DLL (ACEDAO.DLL) 未注册。我可以通过简单地从 Microsoft 下载和安装 Access Runtime 来解决这个问题,之后注册相应的 .dll 并且应用程序运行正常。

问题是,安装 Access Runtime 需要管理员权限,这对于客户端 PC 来说不是一个现实的选择。必须运行该应用程序的所有 PC 都安装了与我的开发人员机器相同的 Office 版本,并且 ACEDAO.dll 在程序文件中,但未注册...是否可以在无需注册的情况下使用该库?

引用 Office 安装文件夹中的 ACEDAO.dll 允许我将“隔离”属性设置为 true。虽然这在构建时给了我很多警告(问题隔离 COM 参考 'Microsoft.Office.Interop.Access.Dao' ...),但它编译并复制了二进制文件夹中的 dll 并创建了一个清单,但它仍然不会在没有注册库的情况下无法工作(来自 mscorlib.dll 的异常 0x8007013D,没有可用的消息文本)...

关于是否以及如何在没有在目标机器上注册的情况下使用 ACEDAO 库的任何想法?

4

0 回答 0