在 clickOnce 安装中包含 ACE OLEDB 12 驱动程序

Posted

技术标签:

【中文标题】在 clickOnce 安装中包含 ACE OLEDB 12 驱动程序【英文标题】:Include ACE OLEDB 12 driver as part of a clickOnce install 【发布时间】:2012-02-03 02:59:31 【问题描述】:

我在 Visual Studio 2010 中开发了一个连接到 Access 2010 *.accdb 数据库的 C# winform 应用程序。它在我的电脑上运行良好,但是当我将它安装在另一台电脑上时,它会抛出错误“'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册。” 按照建议,我尝试将其编译为 x86,但没有任何成功。

感谢任何帮助/建议,我认为我应该将此驱动程序作为 clickOnce 安装的一部分。如果是这样,我该怎么做? (它不会作为选项出现在需求清单中,在 VS 属性 > 发布 > 以前的需求中)

【问题讨论】:

【参考方案1】:

您必须使用更高级的方法来部署必要的驱动程序 - 据我所知,ClickOnce 不会自行完成。我也不认为它像单个 DLL 那样简单。驱动需要注册系统等。

Access 驱动程序存在很大的问题,因为它们的设置方式。如果用户安装了带有 Access 的 Microsoft Office,他们将已经拥有 ACE 驱动程序。问题是,如果他们在 64 位机器上安装了 32 位 Access,您的 64 位应用程序将无法与 Access 通信,因为该机器只有 32 位驱动程序,您无法同时安装。

如果您的用户都没有 Microsoft Office with Access,那么您应该能够根据需要为每台计算机部署独立的 32/64 位驱动程序安装程序。

【讨论】:

是的,我读到了关于 32/64 位 Access 驱动程序之间的问题。对我而言,64位应用程序并不是必需的,32位也可以。我如何部署应用程序,以便它可以根据需要在用户系统上检测/安装正确的驱动程序? 这完全取决于您使用的安装方法。像 InnoSetup 这样的东西有一些脚本功能来检查某些注册表项(找出哪些与 ACE 驱动程序相关联)并在找不到时执行某些任务。我相信 NSIS 软件可以处理同样的事情 - 但我发现 InnoSetup 更易于与 InnoIDE 一起使用。【参考方案2】:

通过将任意程序集和文件添加到项目并将其文件类型更改为内容,可以将任意程序集和文件作为 ClickOnce 安装的一部分。然后它们将出现在应用程序文件列表中。

请注意,如果您这样做,您会收到来自 Visual Studio 的警告,但可以放心地忽略它。

【讨论】:

我认为这样文件被复制到本地机器,但不会被安装。【参考方案3】:

您可以构建一个 msi 而不是 oneclick,并创建一个自定义操作以在安静模式下安装 ace 驱动程序。由于它是一个可执行文件,因此您可以在进程对象中运行它

【讨论】:

以上是关于在 clickOnce 安装中包含 ACE OLEDB 12 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ClickOnce 部署中包含许多附加文件?

请求的 OLE DB 提供程序 Microsoft.ACE.OLEDB.16.0 未注册。如果未安装 32 位驱动程序,请在 64 位模式下运行该软件包

部署 ClickOnce 时缺少 dll

SQL Server:无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象

如何在 WPF 应用程序中包含外部字体而不安装它

在安装项目中包含文件依赖项