【问题标题】:Error LGHT0301: Failed to open the database错误 LGHT0301:无法打开数据库
【发布时间】:2017-04-21 01:17:40
【问题描述】:

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

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

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

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

【问题讨论】:

标签: wix wix3.5


【解决方案1】:

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

【讨论】:

  • 这为我解决了同样的问题。转到wix项目属性,工具设置,然后选中“抑制ICE验证”
  • 我在使用 3.8 版时也遇到了这个问题。上述步骤解决了问题。
  • 对我来说,仅对活动(调试)配置抑制 ICE 验证是不够的,我必须对所有配置抑制 ICE 验证,这样就成功了。
  • 我会先尝试一下,然后再将自己置于 AV 排除路线的风险之中。
【解决方案2】:

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

【讨论】:

  • 从病毒扫​​描中排除临时目录会适得其反,从安全角度来看是一场噩梦。毕竟,临时目录通常可以被任何进程写入。此外,禁用病毒扫描程序或编辑其设置可能并不容易(例如在公司环境中)
  • 请注意,您可以使用 WIX_TEMP 环境变量来指定自定义临时目录,您可能更愿意将其从实时病毒扫描中排除。
【解决方案3】:

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

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

【讨论】:

  • 构建文件夹已经被排除在扫描之外(大概)。
  • 好点 - AV 通常也会扫描临时文件夹。检查传递给 light 命令的参数可能是值得的。 IIRC 可以指定它用于临时工件的文件夹。我不建议在您的临时文件夹上全面禁用 AV,因为这可能会带来安全风险。可能还值得向 Wix 团队建议,他们在验证步骤中放置了一个重试循环,以适应 AV 短时间获取文件的情况,这并不罕见。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    真正的原因是Trend Micro real time scanning

    (以下仅供历史参考)

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


    我遇到了同样的问题。

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

    最后,我尝试添加

    encoding="utf-8"
    

    到以前只有 version='1.0' 属性的 XML 标记。这解决了问题,如 "Failed to open the database" error. - SOLVED

    中所述

    【讨论】:

      【解决方案6】:

      它也是我的防病毒程序。

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          猜你喜欢
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-18
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多