我正在使用WiX 3.5。最近,在构建服务器上经常出现以下WiX错误:
light.exe(,):错误LGHT0301:无法打开数据库。在验证期间,最常发生在尝试使用不受支持的代码页或不是有效Windows Installer数据库的文件打开数据库时。请使用Module / @ Codepage,Package / @ SummaryCodepage,Product / @ Codepage或WixLocalization / @ Codepage中的其他代码页;或确保提供有效Windows Installer数据库的路径。
错误指的是哪个“数据库”?(没有一个WiX源文件长时间发生变化,所以我怀疑这是代码页问题。)
Other people报告此错误可能是由构建服务器上安装的趋势科技Office Scan引起的。我要求系统管理员从扫描中排除构建目录,但仍会出现此错误。 如何确定病毒扫描程序是否是罪魁祸首?(错误并不总是发生,所以如果我禁用病毒扫描程序并且下一次构建成功,我仍然不知道是否有错误永远消失了。)
答案 0 :(得分:17)
“禁用ICE验证”对我有用 - 只需通过.Setup中的Visual Studio 2012进行设置。
答案 1 :(得分: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
。
答案 2 :(得分:3)
这是构建过程和防病毒的常见问题。扫描仪将检测新的MSI包并尝试扫描它。同时,构建过程也会尝试通过运行Internal Consistency Evaluators(ICE)套件来验证它,并且由于数据库上有互斥锁而导致失败。
您应该只从构建输出文件夹中删除病毒扫描。或者,将验证与Light命令分离,以便防病毒扫描在运行ICE验证之前放弃MSI句柄。
答案 3 :(得分:3)
我遇到的问题实际上与我的系统的代码页和语言设置有关。
在Windows的区域设置中添加英语输入语言解决了我的德语Windows安装问题。
答案 4 :(得分:2)
真正的原因是Trend Micro real time scanning!
(以下仅供历史参考)
我跟着@Michael Liu回答并解决了问题
我遇到了同样的问题。
我不是指任何这些标签中的Codepage(或SummaryCodepage),或者实际上是指WXS中的任何位置。放置Codepage =“1252”没有改变任何东西。
最后,我尝试添加
encoding="utf-8"
以前只有version ='1.0'属性的XML标记。这解决了问题,如 "Failed to open the database" error. - SOLVED
中所述答案 5 :(得分:1)
这也是我的防病毒程序。
检查问题是否与防病毒程序有关的一种简单方法是在WiX项目设置中禁用ICE验证(使用版本3.7)。这对我有用,现在是一个永久性的设置,因为在我们公司你不能改变防病毒软件的设置。
答案 6 :(得分:-1)
这是我在使用WiX时发现的最常见错误。最简单的解决方案是转到项目的属性→工具设置→(检查)抑制ICE验证。