Как приложение .NET может работать с 32-битным и 64-битным Office?

У меня 64-битная система Windows и приложение C #, которое использует OleDbConnection для чтения данных Excel через 32-битную версию AccessDatabaseEngine.exe COMponents, поскольку у меня установлен 32-битный Office (как рекомендовано MSFT), а 64-битная версия AccessDatabaseEngine не будет работать с 32-битным Office.

Чтобы мое приложение C # работало, мне пришлось установить «Prefer 32-bit» в настройках сборки проекта. Это устанавливает флаг anycpu32bitpreferred для компилятора / платформы. На платформах Intel нет никаких «предпочтений» по этому поводу.

Так что все работает нормально. На моей машине. Не на 64-битной машине моего начальника, на которой он установил 64-битный Office.

Я не могу найти ни одной опции app.config для принудительного использования 64-битной версии. Есть один? Теоретически возможно ли такое в последовательности загрузки .NET?

В MSFT об этом не думали. Каким-то образом я смогу создать приложение, которое будет работать как с 32-разрядной, так и с 64-разрядной версиями Office. Можно как-нибудь использовать OleDbConnection?

Я знаю о флаге CorFlags.exe / 32bitpref-, но для этого требуется поддержка двух версий двоичного файла.

Любые идеи? Исправления? Параметры App.Config?


person Dave    schedule 04.02.2013    source источник


Ответы (2)


Вам необходимо загрузить 64-разрядную версию ODBC. драйвер (он говорит о доступе, но он также использует драйвер Excel).

Скорее всего, вы получите сообщение об ошибке, в котором говорится, что нельзя одновременно установить 32-разрядную и 64-разрядную версии. Чтобы обойти это, вы должны используйте флаг / passive

Чтобы установить 32-разрядную версию Microsoft ACE OLEDB Provider на компьютере с 64-разрядной версией Office 2010:

  • AccessDatabaseEngine.exe / пассивный

Чтобы установить 64-разрядную версию Microsoft ACE OLEDB Provider на компьютере с 32-разрядной версией Office 2010:

  • AccessDatabaseEngine_X64.exe / пассивный
person Scott Chamberlain    schedule 04.02.2013
comment
См. Здесь знаменитый / пассивный трюк для установки 32-разрядных и 64-разрядных драйверов на одном компьютере: blog.codefluententities.com/2011/01/20/ - person Simon Mourier; 05.02.2013
comment
Ух ты! Хотел бы я знать это год назад, когда я пытался выяснить, как получить 32-битную версию с 64-битным офисом. Спасибо, я обновил свой ответ подробностями с этого веб-сайта. - person Scott Chamberlain; 05.02.2013
comment
Извините за поздний ответ, я не получил никаких уведомлений. Если я добавлю 64-разрядный драйвер, он будет взаимодействовать с 32-разрядной версией Office? Иначе это не поможет. Спасибо, Дэйв - person Dave; 07.02.2013
comment
Я установил 64-разрядный пакет с параметром / passive, и это, похоже, позволяет моей системе больше не нуждаться в параметре Prefer 32-bit для моих приложений, скомпилированных как CPU ANY, для взаимодействия с 32-разрядным Excel. Жду отзывов от своего босса, и если хорошо, то это был ответ. Спасибо, Дэйв - person Dave; 07.02.2013
comment
Хорошо, отлично работает, спасибо! Почему MSFT дает ужасное предупреждение от установки без / пассивного ??? Они должны просто сказать: установите другой или используйте / пассивный, если нужно! Кстати, это не сработало бы без пассивного режима, поскольку мне нужно было 64-битное (ЛЮБОЕ) приложение для взаимодействия с 32-битным Office на одной машине и с 64-битной на другой, где обе машины были 64-битными. - person Dave; 07.02.2013
comment
На самом деле, хотя приложение работает, у меня проблемы с приложениями Office. Excel и Word настраиваются при каждом запуске, и Outlook больше не будет создавать новые папки, утверждая, что Outlook не может прочитать информацию реестра. Я выполнил ремонт Office, и это не помогло. Любые идеи? - person Dave; 13.02.2013
comment
Я удалил x64 AccessDatabaseEngine, затем Word настроил себя один раз, и с этого момента Word и Excel запускались нормально, а не настраивались каждый раз. Затем снова добавьте x64 AccessDatabaseEngine и получите настройку поведения каждый раз. Это работает, но я должен иметь возможность добавлять новые папки в Outlook и не хочу, чтобы задержка происходила каждый раз при запуске WOrd или Excel. Прошу прощения, но снимаю отметку в качестве ответа, если только я не смогу избавиться от сопутствующего ущерба. - person Dave; 13.02.2013
comment
Это также мешает мне войти в MSDN. Говорит, что что-то пошло не так ... после удаления я в порядке. - person Dave; 13.02.2013

Вы можете использовать ODBC для общения с Excel вместо COM-объекта AccessDatabaseEngine. Это пропустит 32/64 битную проблему.

person Sam Axe    schedule 04.02.2013
comment
Спасибо, но не хочу использовать ODBC. - person Dave; 07.02.2013