.NET应用程序如何在32位和64位Office上运行?

5
我有一个Windows 64位系统,使用C#应用程序通过32位AccessDatabaseEngine.exe COMponents中的OleDbConnection读取Excel数据,因为我安装了32位的Office(如MSFT建议),而64位版本的AccessDatabaseEngine无法与32位Office配合使用。
为了使我的C#应用程序正常工作,我必须在项目构建设置中设置“首选32位”。这将设置编译器/ platform anycpu32bitpreferred标志。在英特尔平台上,没有任何“优先”。
所以一切都运行良好,但仅限于我的机器。而老板的64位机器上安装了64位Office,则无法正常运行。
我找不到任何app.config选项来强制使用64位。有吗?在.NET加载序列中理论上可能会有吗?
MSFT没有考虑这个问题。我应该能够构建一个可以同时使用32位和64位Office的应用程序。是否可以使用OleDbConnection解决?
我知道CorFlags.exe / 32bitpref-标志,但这需要维护两个版本的二进制文件。
有什么想法吗?修复方法?App.Config选项?
2个回答

3

您需要下载ODBC驱动程序64位版本(虽然它说是access但也包含Excel驱动程序)。

你可能会遇到一个错误,说你不能同时安装32位和64位驱动,为了解决这个问题,您必须使用/passive标志

在运行Office 2010 64位的计算机上安装Microsoft ACE OLEDB提供程序 32位版本:

  • AccessDatabaseEngine.exe /passive

在运行Office 2010 32位的计算机上安装Microsoft ACE OLEDB提供程序 64位版本:

  • AccessDatabaseEngine_X64.exe /passive

1
请点击此处查看著名的“/passive”技巧,以在同一台计算机上安装32位和64位驱动程序:http://blog.codefluententities.com/2011/01/20/microsoft-access-database-engine-2010-redistributable/ - Simon Mourier
哇塞!我真希望一年前就知道这个,当时我还在试图弄清楚如何在64位的Office中获取32位。谢谢,我已经更新了我的答案,并加入了那个网站的详细信息。 - Scott Chamberlain
我使用/passive选项安装了64位软件包,这似乎使得我的系统不再需要“优先选择32位”选项来让我的CPU ANY编译的应用程序与32位Excel通信。正在等待老板的反馈,如果没问题,那么这就是答案。谢谢,Dave。 - Dave
好的,非常好用,谢谢!为什么MSFT在没有/passive的情况下会发出严重警告呢?他们应该只是说安装其他或者使用/passive如果你必须要用!顺便说一句,如果没有/passive,这是行不通的,因为我需要一个64位(任何)应用程序来与32位Office一台机器进行接口,并在另一台机器上使用64位,其中两台机器都是64位。 - Dave
我卸载了x64 AccessDatabaseEngine,然后Word自己配置了一次,从那时起,Word和Excel每次启动都是正常的,而不是每次都要重新配置。然后再添加x64 AccessDatabaseEngine,就会出现每次都要重新配置的行为。这种方法有点奏效,但我必须能够向Outlook添加新文件夹,并且不希望每次启动WOrd或Excel时都有延迟。所以很抱歉,除非我也能消除附带损害,否则我将取消标记为答案。 - Dave
显示剩余3条评论

0

您可以使用ODBC与Excel通信,而不是使用AccessDatabaseEngine COM对象。这样可以避免32/64位问题。


谢谢,但不想使用ODBC。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接