我正在使用 WiX 3.5。最近,构建服务器上开始频繁出现以下 WiX 错误:
light.exe (,): 错误 LGHT0301: 无法打开数据库。在验证期间,当尝试使用不受支持的代码页或不是有效的 Windows Installer 数据库的文件打开数据库时,最常发生这种情况。请在 Module/@Codepage、Package/@SummaryCodepage、Product/@Codepage 或 WixLocalization/@Codepage 中使用不同的代码页;或者确保您提供有效的 Windows Installer 数据库的路径。
错误指的是哪个“数据库”?(WiX源文件已经很长时间没有改变了,所以我怀疑这是代码页问题。)
其他人报告此错误可能是由趋势科技Office Scan引起的,它确实安装在构建服务器上。我要求系统管理员从扫描中排除构建目录,但仍然出现此错误。 如何确定病毒扫描程序是否是罪魁祸首?(错误并不总是发生,因此,如果我禁用病毒扫描程序并且下一次构建成功,我仍然不知道错误是否已永久消失。 )
“禁用 ICE 验证”对我有用 - 只是通过 .Setup 中的 Visual Studio 2012 设置。
研究 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
。
这是构建过程和防病毒软件的常见问题。扫描仪将检测新的 MSI 包并尝试扫描它。同时,构建过程还尝试通过运行 Internal Consistency Evaluators (ICE) 套件来验证它,但会失败,因为数据库上有互斥体。
您应该从构建输出文件夹中删除病毒扫描。或者将验证与 Light 命令分离,以便防病毒扫描在运行 ICE 验证之前放弃 MSI 句柄。
我遇到了同样的问题,实际上与我的系统的代码页和语言设置有关。
在 Windows 的区域设置中添加英语输入语言解决了我的德语 Windows 安装问题。
真正的原因是趋势科技实时扫描!
(以下仅供历史参考)
我按照@Michael Liu的回答解决了问题
我也遇到了同样的问题。
我并不是指任何这些标签中的代码页(或 SummaryCodepage),事实上也不是 WXS 中的任何地方。设置 Codepage="1252" 没有改变任何东西。
最后,我尝试添加
encoding="utf-8"
之前只有 version='1.0' 属性的 XML 标记。这解决了问题,如“无法打开数据库”错误中所述。 - 已解决
这也是我的防病毒程序。
检查问题是否与防病毒程序有关的一个简单方法是在 WiX 项目设置中禁用 ICE 验证(使用版本 3.7)。这对我有用,并且现在是永久设置,因为在我们公司,您无法更改防病毒软件的设置。
使用 FireGiant 的 HeatWave for Visual Studio 2022 插件从 WiX 3.11 升级到 5.0.1 后,此错误出现在我们的构建服务器上(但不在我的开发人员计算机上):
(WindowsInstallerValidation target) ->
wix.exe : error WIX0301: Failed to open the database.
During validation, this most commonly happens when attempting to open a
database using an unsupported code page or a file that is not a valid
Windows Installer database. Please use a different code page in
Module/@Codepage, Package/@SummaryCodepage, Package/@Codepage, or
WixLocalization/@Codepage; or make sure you provide the path to a valid
Windows Installer database.
经过一番调查,我发现在转换过程中,XML声明被从WXS文件中删除了:
<?xml version="1.0" encoding="utf-8"?>
再次添加后错误消失。或者,向 WXS 文件添加 BOM 也可以修复该错误。
我想知道是什么阻止了我的开发机器上发生错误。
该包的代码页和语言如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx">
<Package
Codepage="1252"
Language="1031"
这是我在使用 WiX 时发现的最常见错误。最简单的解决方案是转到项目的属性 → 工具设置 →(检查)抑制 ICE 验证。