我使用WiX的3.5。 近日,以下WiX的错误开始构建服务器上频繁出现:
light.exe(,):错误LGHT0301:无法打开数据库。 在验证过程中,这种尝试打开使用的是不受支持的代码页或一个文件,是不是有效的Windows安装程序数据库的数据库时,最常见的情况。 请使用模块不同的代码页/ @代码页,封装/ @ SummaryCodepage,产品/ @代码页,或WixLocalization / @代码页; 或者确保您提供一个有效的Windows安装程序数据库的路径。
其中“数据库”那个错误是指什么? (该维克斯源文件没有在很长一段时间发生了变化,所以我怀疑这是一个代码页的问题。)
其他人报告说,这种错误可能是由趋势科技厅扫描,这是构建服务器上安装确实引起。 我问系统管理员排除扫描生成目录,但这个错误仍然出现。 我怎么能确定病毒扫描程序是否是罪魁祸首? (并不总是会出现错误,所以如果我禁用了病毒扫描程序和未来建设成功,我仍然不知道是否有错误已永久消失。)
通过Visual Studio 2012在.Setup只是设置 - 将“禁用ICE验证”为我工作。
研究维克斯源代码和运行后的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包,并尝试扫描。 同时,构建过程也试图通过运行来验证其内部一致性评估程序 (ICE)套件,你会得到一个失败,因为在数据库上有一个互斥。
您应该只是从你的编译输出文件夹中删除的病毒扫描。 或者分离从验证光命令,这样在运行ICE验证之前的防病毒扫描放弃微星手柄。
我这是居然真的涉及到的代码页和我的系统的语言设置了同样的问题。
在Windows的区域设置添加英文输入语言解决了我的德语Windows安装的问题。
真正的原因是趋势科技的实时扫描 !
(下面仅仅是作为历史参考)
我跟着@迈克尔刘答案和解决的问题
我有同样的问题。
我没有在任何这些标签的参考代码页(或SummaryCodepage),或事实上在任何地方WXS。 把代码页=“1252”没有改变任何东西。
最后,我尝试添加
encoding="utf-8"
到XML标签,其先前只有一个版本=“1.0”属性。 这解决了问题,如在“无法打开数据库”错误。 - 解决了
这也是对我的防病毒程序。
一个简单的方法来检查,如果这个问题是关系到防病毒程序是在维克斯项目设置来禁用ICE验证(使用3.7版)。 这个工作对我来说,是一个永久性的设置现在,因为在我们公司,你不能改变杀毒软件的设置。
这是最常见的错误我在使用WiX的发现。 这个最简单的办法就是去你的项目→ 工具设置 →(检查) 禁止ICE验证的性能。