错误LGHT0301:无法打开数据库

问题描述 投票:0回答:8

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

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

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

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

wix wix3.5
8个回答
15
投票

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


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


4
投票

这是构建过程和防病毒软件的常见问题。扫描仪将检测新的 MSI 包并尝试扫描它。同时,构建过程还尝试通过运行 Internal Consistency Evaluators (ICE) 套件来验证它,但会失败,因为数据库上有互斥体。

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


3
投票

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

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


2
投票

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

(以下仅供历史参考)

我按照@Michael Liu的回答解决了问题


我也遇到了同样的问题。

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

最后,我尝试添加

encoding="utf-8"

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


1
投票

这也是我的防病毒程序。

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


0
投票

使用 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"

-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.