Механизм БД MS Access (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 flag позволяет установить два, и наш установщик использует пассив. Оба устанавливаются, но однажды в системе либо наше программное обеспечение больше не работает, либо Office постоянно восстанавливает его установку. Есть ли разумный способ сделать эту работу?

6 ответов

Решение

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

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

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

  • Проверьте 64-разрядный раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths" перед установкой 64-разрядной версии распространяемого компонента Microsoft Access Database Engine 2010.
  • Если он не содержит значение реестра "mso.dll", вам потребуется переименовать или удалить это значение после установки 64-разрядной версии Microsoft Access Database Engine 2010, распространяемой в системе с 32-разрядной версией MS. Офис установлен.
  • Используйте параметр командной строки "/passive" для установки распространяемого файла, например "C:\directory path\AccessDatabaseEngine_x64.exe" /passive
  • Удалите или переименуйте значение реестра "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", как описано выше (при необходимости).

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

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

  2. Загрузите распространяемый компонент Microsoft Access Database Engine 2010.

  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

У меня было более конкретное сообщение об ошибке, в котором говорилось, что нужно удалить "Расширяемый компонент 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)
  • Введите "installer" (откроется папка установщика%windir%), убедитесь, что все файлы видны в Windows (Настройки папки)
  • Добавьте столбец "Тема" (и сделайте его шириной не менее 400 пикселей) - щелкните правой кнопкой мыши заголовки столбцов, нажмите "Еще", затем найдите "Тема"
  • Сортируйте по столбцу "Тема" и прокручивайте вниз, пока не найдете имя, упомянутое на экране ошибок ("Компонент расширяемости" нажми и работай "в Office 16")
  • Щелкните правой кнопкой мыши MSI и выберите "Удалить".

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

Сначала установите 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

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

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

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

Другие вопросы по тегам