MS Access DB Engine (32-разрядная версия) с 64-разрядной версией Office

В настоящее время у нас есть серьезная проблема с использованием Microsoft Access Database Engine 2010. Механизм поставляется в 64-битной и 32-битной формах, и это хорошо. Однако, очевидно, вам всегда нужно устанавливать 32-битную версию, если хост-процесс всегда 32-битный. Хорошо, мы можем это сделать.

Наше программное обеспечение работает с множеством устаревших компонентов, которые являются 32-битными, и большая часть из них находится в коде VB6, который генерирует 32-битную сборку. Итак, мы исходим из того, что драйвер также должен быть установлен как 32-битный. Действительно, когда мы устанавливаем 32-битные драйверы на 64-битный компьютер и запускаем наши 32-битные приложения, он работает правильно.

Однако проблема начинается, когда в системе установлен 64-разрядный Office 2010. Поверьте мне, мы пытались объяснить пользователям, что 64-разрядный Office практически не нужен, но безрезультатно. Поскольку компьютеры сходят с конвейера с установленными 64-разрядными версиями, мы не можем справляться с запросами в службу поддержки, когда наше программное обеспечение что-то ломает. Либо 64-разрядный Office нарушает нашу установку, либо наша установка нарушает их версию Office, но это в любом случае не очень хорошо. Еще одна проблема заключается в том, что не унаследованное программное обеспечение иногда устанавливает 64-разрядные драйверы (как и должно), и две версии просто несовместимы каким-либо разумным образом. Либо наше программное обеспечение ломается, либо их программное обеспечение ломается.

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


person drharris    schedule 04.09.2012    source источник
comment
@ghoti Само собой разумеется, но поставщик закрытого кода - это тоже моя компания! Да, у нас больше нет источников некоторых устаревших библиотек DLL, используемых критически важным программным обеспечением. Больно, мягко говоря. Спасибо за подсказку о ServerFault, надеюсь, в следующий раз туда перейду. Основная причина, по которой я начал здесь, заключается в том, что мы считаем, что проблема с конфигурацией системы может быть связана с программированием. Большинство системных администраторов будут счастливы, когда вы сможете установить оба, что не решает реальной проблемы. Мы надеемся, что другие программисты уже столкнулись с несовместимостью, но, похоже, никто не   -  person drharris    schedule 11.09.2012
comment
Не думаю, что это не по теме.   -  person P a u l    schedule 19.07.2013


Ответы (7)


Вот обходной путь для установки 64-разрядной версии распространяемого компонента Microsoft Access Database Engine 2010 в системе с установленной 32-разрядной версией MS Office:

  • Перед установкой 64-разрядной версии распространяемого компонента Microsoft Access Database Engine 2010 проверьте 64-разрядный раздел реестра «HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Common \ FilesPaths».
  • Если он не содержит значения реестра «mso.dll», вам нужно будет переименовать или удалить значение после установки 64-разрядной версии распространяемого компонента Microsoft Access Database Engine 2010 в системе с 32-разрядной версией MS. Офис установлен.
  • Используйте параметр командной строки "/ passive" для установки распространяемого пакета, например "C: \ путь к каталогу \ AccessDatabaseEngine_x64.exe" / пассивный
  • Удалите или переименуйте параметр реестра «mso.dll», который содержит путь к 64-разрядной версии MSO.DLL (и не должен использоваться 32-разрядными версиями MS Office).

Теперь вы можете запустить 32-битное приложение MS Office без «перенастройки». Обратите внимание, что значение реестра «mso.dll» уже будет присутствовать, если установлена ​​64-разрядная версия MS Office. В этом случае значение не следует удалять или переименовывать.

Также, если вы не хотите использовать параметр командной строки «/ passive», вы можете отредактировать файл AceRedist.msi, чтобы удалить проверку архитектуры MS Office:

  • загрузите и установите Microsoft Orca: http://msdn.microsoft.com/en-us/library/windows/desktop/aa370557(v=vs.85).aspx
  • разархивируйте файл AccessDatabaseEngine.exe или AccessDatabaseEngine_x64.exe
  • откройте файл AceRedist.msi в Orca
  • найдите две строки таблицы, содержащие действие «CheckOfficeArchitecture», и удалите эти строки
  • сохраните обновленный файл AceRedist.msi

Теперь вы можете использовать этот файл для установки распространяемого пакета Microsoft Access Database Engine 2010 в системе, где установлена ​​«конфликтующая» версия MS Office (например, 64-разрядная версия в системе с 32-разрядной версией MS Office). Убедитесь, что вы переименовали значение реестра «mso.dll», как описано выше (при необходимости).

person Peter Coppens    schedule 20.02.2013
comment
Интересный. В каком-то блоге сообщения, которые могут быть актуальным. - person noam; 25.04.2013
comment
Связанная ветка MSDN: social.msdn.microsoft.com/Forums/en-US/ - person jordanpg; 11.03.2014
comment
Большое спасибо! Я бы запустил 64-битный движок с переключателем / passive, и мне показалось, что я решил проблему, связанную с загрузкой данных из Access или Excel в службах Analysis Services (табличная модель) ... до тех пор, пока я не попробовал загрузить Access 2010, когда он разбился. Это решило проблему! - person Andy Brown; 01.07.2015
comment
чтобы разархивировать .exe, вызовите его с помощью / extract: c: \ temp \ accx, а в Orca вы также можете удалить строку (строки) в разделе LaunchConditions - person Bernhard; 28.08.2015

Я не хочу отвечать на свои вопросы, но я наконец нашел решение, которое действительно работает (использование сокетной связи между службами может решить проблему, но создает еще больше проблем). Поскольку наша база данных является устаревшей, в строке подключения просто требуется Microsoft.ACE.OLEDB.12.0. Оказывается, это также было включено в Office 2007 (и MSDE 2007), где доступна только 32-разрядная версия. Таким образом, вместо установки 32-разрядной версии MSDE 2010 мы устанавливаем MSDE 2007, и он отлично работает. Затем другие приложения могут установить 64-битный MSDE 2010 (или 64-битный Office 2010), и это не конфликтует с нашим приложением.

Пока что это приемлемое решение для всех сред ОС Windows.

person drharris    schedule 17.09.2012
comment
Мне понадобились 32-битные драйверы для PHP-приложения, и это сработало отлично. (Забавно, что я не могу запустить 64-битный PHP, потому что расширение Microsoft SQLSRV его не поддерживает.) - person Álvaro González; 26.11.2013
comment
Я пытаюсь создать системный DSN для MS Access. У меня 32-битный офис на 64-битной системе win 7. Для м.б. этот способ не сработал. Я просто использовал 32-битную версию ODBC-менеджера - c: \ windows \ sysWOW64 \ odbcad32.exe - person Steam; 11.03.2014
comment
Ваш подход работает с Office 2007. Но у меня возникла проблема с Office 2013, где использование механизма доступа 2007 не работает. Нам пришлось установить 32-битную среду выполнения Access 2010, чтобы приложение работало с Office 2013 x64. - person Exatex; 27.05.2015
comment
@Exatex, это работает, но имейте в виду, что в конечном итоге он сломается, если другое приложение установит правильную 64-битную версию, и вы получите от него всевозможные случайные ошибки. Есть только два реальных решения - обновить все компоненты, чтобы они были должным образом согласованы с системой (32-битная против 64-битной), или уменьшите потребность в базе данных до устаревшего драйвера, который был выпущен только для 32-битной версии (например, наш). В конце концов, в противном случае какой-то другой компонент будет конфликтовать с вашей настройкой. - person drharris; 08.06.2015
comment
Спустя 3 года ваше решение все еще спасает жизни :). Иметь ТОЧНО такую ​​же проблему с устаревшим кодом и прочим! - person ; 13.03.2016
comment
@drharris Я ПОЛНОСТЬЮ согласен с @Nostradamus! Большое спасибо за публикацию своего ответа и спасибо StackOverflow за его сохранение! :-D - person AndrewJacksonZA; 17.03.2016
comment
@AndrewJacksonZA Нет проблем! Я сообщу, что спустя 4 года это решение по-прежнему работает нормально даже на современных платформах, таких как Windows 10. По-прежнему используются старые устаревшие 32-разрядные библиотеки DLL, скомпилированные десять лет назад для доступа к устаревшей базе данных, используя эту строку подключения с драйверами 2007 года. День, когда MSDE 2007 перестанет работать в Windows [что бы то ни было], будет действительно печальным. - person drharris; 17.03.2016

Аналогичный подход к ответу @Peter Coppins. Это, я думаю, немного проще и не требует использования утилиты Orca:

  1. Проверьте раздел реестра «HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Common \ FilesPaths» и убедитесь, что значение «mso.dll» НЕТ. Если он присутствует, значит, 64-разрядная версия Office, по-видимому, установлена, и вам не нужен этот обходной путь.

  2. Загрузите Microsoft Access Database Engine 2010 Redistributable.

  3. В командной строке запустите: AccessDatabaseEngine_x64.exe / passive

(Примечание: у меня произошел сбой или отказ этого установщика, поэтому я разархивировал компоненты и запустил: AceRedist.msi / passive, и все установилось нормально. Может быть, дело в Windows 10.)

  1. Удалите или переименуйте значение «mso.dll» в ключе «HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Common \ FilesPaths».

Источник: Как установить 64-разрядные драйверы баз данных Microsoft вместе с 32-разрядным Microsoft Office

person Jahmic    schedule 26.06.2016

У меня было более конкретное сообщение об ошибке, в котором говорилось об удалении компонента расширяемости Office 16 нажми и работай.

Я исправил это, выполнив действия, указанные в https://www.tecklyfe.com/fix-for-microsoft-office-setup-error-please-uninstall-all-32-bit-office-programs-office.-15-click-to-run-extensibility-component/

  • Перейдите в Пуск> Выполнить (или Winkey + R)
  • Введите «установщик» (откроется папка установщика% windir%), убедитесь, что все файлы видны в Windows (настройки папки).
  • Добавьте столбец «Тема» (и сделайте его шириной не менее 400 пикселей) - щелкните правой кнопкой мыши заголовки столбца, нажмите «Еще», затем найдите «Тема».
  • Выполните сортировку по столбцу «Тема» и прокрутите вниз, пока не найдете имя, указанное на экране ошибки («Компонент расширения Office 16 Click-to-Run»).
  • Щелкните правой кнопкой мыши MSI и выберите удалить.
person kloarubeek    schedule 27.06.2017

Установите версию 2007, кажется, что если вы установите версию, противоположную той версии Office, которую вы используете, вы можете заставить ее работать.

http://www.microsoft.com/en-us/download/details.aspx?id=23734

person Matthew Dolman    schedule 16.08.2015

Даже попробовал все предложения, в моем случае (Office x64 - Visual Studio 2017), единственный способ иметь оба механизма доступа в установке Office 64x, чтобы вы могли использовать его в Visual Studio и с 2016+ версия Office, заключается в установке версии 2010 Engine.

Сначала установите x64 с этой страницы

https://www.microsoft.com/en-us/download/details.aspx?id=54920

а потом версия x86 из этого

https://www.microsoft.com/en-us/download/details.aspx?id=13255

из этого блога: http://dinesql.blogspot.com/2017/10/microsoft-access-database-engine-2016-Redistributable-Setup-you-cannot-install-the-32-bit-version-You-cannot-install-the-64-bit-version.html

person JoeCool    schedule 03.03.2020
comment
Больше ничего не работало. Это то, что исправило это для меня. Спасибо! - person Anthony.; 10.06.2021

Если обе версии Microsoft Access Database Engine 2010 не могут сосуществовать, ваше единственное решение - пожаловаться в Microsoft, поскольку загрузка 64-битных версий этого в ваше 32-битное приложение напрямую невозможна, вы можете сделать службу, которая работает в 64-битное соединение с другим 32-битным сервисом или вашим приложением через каналы или сетевые сокеты, но это может потребовать значительных усилий.

person Rafael    schedule 14.09.2012
comment
Если бы он сделал такую ​​вещь, чтобы иметь отдельный процесс для взаимодействия между его приложением и файлом БД, он бы просто Postgres. - person Hikari; 04.12.2014
comment
они могут сосуществовать без каких-либо обнаруженных на данный момент проблем. сделайте это так, как сказал Питер: stackoverflow.com/a/14982382/1498669 - удалите параметр CheckOfficeArchitecture из обоих установщиков msi - person Bernhard; 14.01.2016