Ошибка LGHT0301: Не удалось открыть базу данных
Я использую WiX 3.5. Недавно на сервере сборки часто возникала следующая ошибка WiX:
light.exe(,): ошибка LGHT0301: Не удалось открыть базу данных. Во время проверки это чаще всего происходит при попытке открыть базу данных с использованием неподдерживаемой кодовой страницы или файла, который не является допустимой базой данных установщика Windows. Пожалуйста, используйте другую страницу кода в модуле /@Codepage, Package/@SummaryCodepage, Product/@Codepage или WixLocalization/@Codepage; или убедитесь, что вы указали путь к действительной базе данных установщика Windows.
К какой "базе данных" относится ошибка? (Ни один из исходных файлов WiX не изменился за долгое время, поэтому я сомневаюсь, что это проблема с кодовой страницей.)
Другие люди сообщили, что эта ошибка может быть вызвана Trend Micro Office Scan, которая действительно установлена на сервере сборки. Я попросил системного администратора исключить каталоги сборки из проверки, но эта ошибка все еще происходит. Как определить, является ли вирусный сканер виновником? (ошибка не всегда возникает, поэтому, если я отключу антивирусный сканер, а следующая сборка успешно завершена, я все еще не знаю, является ли ошибка ушел навсегда.)
Ответы
Ответ 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.