15

我正在使用 WiX 3.5。最近,在构建服务器上开始频繁出现以下 WiX 错误:

light.exe (,): 错误 LGHT0301: 无法打开数据库。在验证期间,当尝试使用不受支持的代码页或不是有效的 Windows Installer 数据库的文件打开数据库时,最常发生这种情况。请在 Module/@Codepage、Package/@SummaryCodepage、Product/@Codepage 或 WixLocalization/@Codepage 中使用不同的代码页;或确保提供有效 Windows Installer 数据库的路径。

错误指的是哪个“数据库”?(WiX 源文件很长一段时间都没有更改,所以我怀疑这是代码页问题。)

其他人报告此错误可能是由 Trend Micro Office Scan 引起的,它确实安装在构建服务器上。我要求系统管理员从扫描中排除构建目录,但仍然出现此错误。如何确定病毒扫描程序是否是罪魁祸首?(错误并不总是发生,所以如果我禁用病毒扫描程序并且下一次构建成功,我仍然不知道错误是否已经永久消失。)

4

7 回答 7

15

“禁用 ICE 验证”对我有用 - 只是在 .Setup 中通过 Visual Studio 2012 进行的设置。

于 2013-10-07T14:22:21.550 回答
13

在研究了 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.

于 2013-02-12T23:58:28.670 回答
4

这是构建过程和防病毒软件的常见问题。扫描仪将检测到新的 MSI 包并尝试对其进行扫描。同时,构建过程还尝试通过运行 内部一致性评估器(ICE) 套件来验证它,但由于数据库上有互斥体,因此您会失败。

您应该从构建输出文件夹中删除病毒扫描。或者,将验证与Light命令分离,以便防病毒扫描在您运行 ICE 验证之前放弃 MSI 句柄。

于 2013-02-12T20:16:02.713 回答
3

我遇到了同样的问题,这实际上与我系统的代码页和语言设置有关。

在 Windows 的区域设置中添加英语输入语言解决了我的德语 Windows 安装问题。

于 2013-02-28T13:52:36.627 回答
2

真正的原因是趋势科技实时扫描

(以下仅供历史参考)

我跟着@Michael Liu回答并解决了问题


我有同样的问题。

我不是指任何这些标签中的代码页(或摘要代码页),实际上也不是 WXS 中的任何地方。放置 Codepage="1252" 并没有改变任何东西。

最后,我尝试添加

encoding="utf-8"

到以前只有 version='1.0' 属性的 XML 标记。这解决了问题,如“无法打开数据库”错误中所述。- 解决了

于 2013-05-29T05:03:34.960 回答
1

它也是我的防病毒程序。

检查问题是否与防病毒程序有关的一种简单方法是在 WiX 项目设置中禁用 ICE 验证(使用版本 3.7)。这对我有用,现在是永久设置,因为在我们公司,您无法更改防病毒软件的设置。

于 2013-09-27T17:13:46.633 回答
-2

这是我在使用 WiX 时发现的最常见错误。最简单的解决方案是转到项目的属性→工具设置→(检查)抑制ICE验证

于 2014-12-05T14:19:24.410 回答