使用 Access 数据库部署 C# 应用程序,无需安装 Access
Deploy C# application with Access Database, without access instalation
上下文
关于更多上下文,我工作的公司制作了一个在 MS Access 中运行的 Access vb.net 应用程序。他们想为其升级并创建一个 C# WPF 前端。这很好用,除了以下事实:当我安装应用程序并下载 [dummyDB].accdb (32-bits 2016)
应用程序立即因错误而中断:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
然后我安装了 Microsoft 的 2010 AccessDataBaseEngine 并出现了一个新错误:
This Database file requires a newer version of Access
很自然地我回到微软,下载并安装了 2016 x64(我的系统是 64 位)并再次尝试。
很遗憾,我们又回到了第一个错误。所以我尝试安装 2016 32 位 AccessDataBaseEngine 但 运行 进入我已经安装 64 位办公产品的问题。 (之前的32位AccessDataseEngine我也卸载了)
我们当然不希望用户为了使用我们的应用程序而重新安装所有 Office 产品。
问题
- 是否有我们可以使用的某种 NugetPackage,以便客户可以开箱即用地与 AccessDatabase 进行交互?
- 如果没有,是否有办法让他们不必重新安装所有 Office 产品?
ps。为用户提供不同的 32 位和 64 位数据库文件也不是一种选择,因为使用不同系统的不同用户将不得不访问相同的数据库文件。
我不知道我是否完全忘记了这里,但将不胜感激任何帮助
申请信息:
- WPF 应用程序 (.Net Framework 4.7.2)
- 构建目标:任何 CPU
Is there a NugetPackage of somesort that we could use so the customer can interact with the AccessDatabase out of the box
没有,据我所知没有。
If not, is there anyway to make it so they wouldn't have to reinstall all of their Office products?
您可以编写一个包装器来处理 32 位和 64 位版本的访问驱动程序。 IE。如果安装的驱动程序与您的程序使用相同的平台,您可以照常继续。如果它是另一个平台,您需要使用正确的平台启动一个新进程,并将所有数据库工作委托给这个进程。如果您的进程是任何 CPU 并且在 64 位 windows 上 运行,则实际平台将取决于“首选 32 位”标志。
另一种选择是构建整个应用程序的 32 位和 64 位版本,运行 与办公室安装相匹配的版本。这可能更容易,但如果您有其他特定于平台的依赖项,则可能不起作用。
这一切都假设 office 已经安装,如果没有,您可以部署具有正确位的独立 ace 驱动程序(即 AccessDataBaseEngine)。数据库文件本身与平台无关,可以通过 32 位或 64 位进程访问。它是需要正确版本的驱动程序。
请注意,Access 很难使用,而且很容易出错。如果这个产品打算长期使用,我建议尽早迁移到更好的东西。 SqlLite 是一种流行的嵌入式数据库引擎,可以作为替代。
上下文
关于更多上下文,我工作的公司制作了一个在 MS Access 中运行的 Access vb.net 应用程序。他们想为其升级并创建一个 C# WPF 前端。这很好用,除了以下事实:当我安装应用程序并下载 [dummyDB].accdb (32-bits 2016)
应用程序立即因错误而中断:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
然后我安装了 Microsoft 的 2010 AccessDataBaseEngine 并出现了一个新错误:
This Database file requires a newer version of Access
很自然地我回到微软,下载并安装了 2016 x64(我的系统是 64 位)并再次尝试。
很遗憾,我们又回到了第一个错误。所以我尝试安装 2016 32 位 AccessDataBaseEngine 但 运行 进入我已经安装 64 位办公产品的问题。 (之前的32位AccessDataseEngine我也卸载了)
我们当然不希望用户为了使用我们的应用程序而重新安装所有 Office 产品。
问题
- 是否有我们可以使用的某种 NugetPackage,以便客户可以开箱即用地与 AccessDatabase 进行交互?
- 如果没有,是否有办法让他们不必重新安装所有 Office 产品?
ps。为用户提供不同的 32 位和 64 位数据库文件也不是一种选择,因为使用不同系统的不同用户将不得不访问相同的数据库文件。
我不知道我是否完全忘记了这里,但将不胜感激任何帮助
申请信息:
- WPF 应用程序 (.Net Framework 4.7.2)
- 构建目标:任何 CPU
Is there a NugetPackage of somesort that we could use so the customer can interact with the AccessDatabase out of the box
没有,据我所知没有。
If not, is there anyway to make it so they wouldn't have to reinstall all of their Office products?
您可以编写一个包装器来处理 32 位和 64 位版本的访问驱动程序。 IE。如果安装的驱动程序与您的程序使用相同的平台,您可以照常继续。如果它是另一个平台,您需要使用正确的平台启动一个新进程,并将所有数据库工作委托给这个进程。如果您的进程是任何 CPU 并且在 64 位 windows 上 运行,则实际平台将取决于“首选 32 位”标志。
另一种选择是构建整个应用程序的 32 位和 64 位版本,运行 与办公室安装相匹配的版本。这可能更容易,但如果您有其他特定于平台的依赖项,则可能不起作用。
这一切都假设 office 已经安装,如果没有,您可以部署具有正确位的独立 ace 驱动程序(即 AccessDataBaseEngine)。数据库文件本身与平台无关,可以通过 32 位或 64 位进程访问。它是需要正确版本的驱动程序。
请注意,Access 很难使用,而且很容易出错。如果这个产品打算长期使用,我建议尽早迁移到更好的东西。 SqlLite 是一种流行的嵌入式数据库引擎,可以作为替代。