Ошибка LGHT0301: Не удалось открыть базу данных - программирование
Подтвердить что ты не робот

Ошибка LGHT0301: Не удалось открыть базу данных

Я использую WiX 3.5. Недавно на сервере сборки часто возникала следующая ошибка WiX:

light.exe(,): ошибка LGHT0301: Не удалось открыть базу данных. Во время проверки это чаще всего происходит при попытке открыть базу данных с использованием неподдерживаемой кодовой страницы или файла, который не является допустимой базой данных установщика Windows. Пожалуйста, используйте другую страницу кода в модуле /@Codepage, Package/@SummaryCodepage, Product/@Codepage или WixLocalization/@Codepage; или убедитесь, что вы указали путь к действительной базе данных установщика Windows.

К какой "базе данных" относится ошибка? (Ни один из исходных файлов WiX не изменился за долгое время, поэтому я сомневаюсь, что это проблема с кодовой страницей.)

Другие люди сообщили, что эта ошибка может быть вызвана Trend Micro Office Scan, которая действительно установлена ​​на сервере сборки. Я попросил системного администратора исключить каталоги сборки из проверки, но эта ошибка все еще происходит. Как определить, является ли вирусный сканер виновником? (ошибка не всегда возникает, поэтому, если я отключу антивирусный сканер, а следующая сборка успешно завершена, я все еще не знаю, является ли ошибка ушел навсегда.)

4b9b3361

Ответ 1

Изучив исходный код WiX и запустив Process Monitor, я обнаружил, что исключить каталоги сборки из проверки на вирусы недостаточно.

Объяснение: При запуске light.exe он создает целевой файл MSI во временном каталоге. (Этот файл является базой данных, к которой относится сообщение об ошибке LGHT0301.) После того, как light.exe закрывает файл MSI, ntrtscan.exe открывает файл MSI для доступа на чтение и доступ только для чтения. Позже, на этапе проверки базы данных, light.exe пытается повторно открыть файл MSI для доступа для чтения/записи, и происходит нарушение обмена.

Решение: Исключить временный каталог из сканирования в режиме реального времени. Например, в Windows Server 2008 этот каталог C:\Users\«username»\AppData\Local\Temp.

Ответ 2

"Отключить проверку ICE" работал у меня - просто настройка через Visual Studio 2012 в .Setup.

Ответ 3

Это обычная проблема с процессами сборки и антивирусом. Сканер обнаружит новый пакет MSI и попытается его отсканировать. Тем временем процесс сборки также пытается проверить его, запустив "Набор для согласования согласованности внутри домена" (ICE), и вы получите отказ, потому что база данных имеет мьютекс на Это.

Вам следует просто удалить проверку вирусов из выпадающих папок сборки. В качестве альтернативы отмените проверку из Light, чтобы антивирусное сканирование отменило дескриптор MSI до запуска проверки ICE.

Ответ 4

У меня была та же проблема, которая действительно была связана с кодовыми страницами и языковыми настройками моей системы.

Добавление языка ввода на английском языке в региональных настройках Windows решило проблему при установке моего немецкого Windows.

Ответ 5

Настоящей причиной было сканирование в режиме реального времени Trend Micro!

(Ниже приведена только историческая ссылка)

Я последовал за @Michael Liu и решил проблему


У меня была та же проблема.

Я не имею в виду Codepage (или SummaryCodepage) в любом из этих тегов или, фактически, в любом месте WXS. Помещение Codepage = "1252" ничего не изменило.

Наконец, я попробовал добавить

encoding="utf-8"

в тег XML, который ранее имел только атрибут version = '1.0'. Это устранило проблему, как описано в "Не удалось открыть базу данных" . - РЕШЕНИЕ

Ответ 6

Это была также антивирусная программа для меня.

Легкий способ проверить, связана ли проблема с антивирусной программой, отключить проверку ICE в настройке проекта WiX (с использованием версии 3.7). Это сработало для меня, и теперь это постоянная настройка, поскольку в нашей компании вы не можете изменить настройки антивирусного программного обеспечения.

Ответ 7

Это самая распространенная ошибка, которую я обнаружил при использовании WiX. Самое простое решение для этого - перейти к Свойствам вашего проекта → Настройки инструмента → (Проверить) Подавить подтверждение ICE.