Механизм БД 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:
Проверьте раздел реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths" и убедитесь, что значение "mso.dll" НЕ присутствует. Если он присутствует, значит, 64-разрядная версия Office установлена, и этот обходной путь не требуется.
Загрузите распространяемый компонент Microsoft Access Database Engine 2010.
Из командной строки запустите: AccessDatabaseEngine_x64.exe / passive
(Примечание: этот установщик молча разбился или не сработал для меня, поэтому я разархивировал компоненты и запустил: AceRedist.msi /passive, и он установился нормально. Может быть, для Windows 10.)
- Удалите или переименуйте значение "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-битным сервисом или вашим приложением через каналы или сетевые сокеты, но это может потребовать значительных усилий.