【问题标题】:Installer fails on Windows Server 2012 R2Windows Server 2012 R2 上的安装程序失败
【发布时间】:2016-03-23 08:16:02
【问题描述】:

我的 wix 安装程序有一个自定义操作,它只在升级期间运行,并调用一个 exe 来编辑缓存 msi 中的一些条件。此自定义操作在“删除现有产品”之前运行。安装程序在除 2012 R2 之外的所有 Windows 环境中成功运行且没有错误。

Windows Server 2012 R2 上,安装程序在该特定自定义操作中失败并抛出错误 110。我尝试以管理员身份运行安装程序,但仍然失败。我不知道这次失败背后的原因。非常感谢任何帮助。

【问题讨论】:

  • 错误 110 表示“系统无法打开指定的设备或文件。”这可能是由于很多原因,从防病毒开始到没有安装所需的网络框架结束。你到底想在这个自定义操作中做什么?
  • @yossiz74 是的,我知道 110 的含义。这个自定义操作成功调用了一个 exe(从日志中确认)。该 exe 应该在升级期间编辑缓存的 msi 中的一些条件。当我在 2012 R2 环境中运行升级时,exe 无法打开缓存的 MSI 数据库。
  • Ankit,你是怎么解决这个问题的?

标签: wix windows-installer windows-server-2012-r2


【解决方案1】:

如果安装的产品损坏,则标准解决方案是使用补丁 (msp) 或更新来修复它,方法是使用固定的 MSI 重新安装/重新缓存产品。 “修复它”显然是指纠正导致升级在这些情况下失败的任何原因。

否则问题出在那个程序上,并找出它失败的确切位置和原因。我们不知道你是否调用 MsiOpenDabase,是否使用 C# P/Invoke 等等。它需要跟踪能力来说明哪些工作有效,哪些无效,因为问题最终是关于为什么代码在特定操作系统版本上失败的原因。

MsiOpenDatabase 和 110 的结果很多,比如这个:

Error 110 (open_failed) MsiOpenDatabase - error in the loop

【讨论】:

    【解决方案2】:

    必须编辑缓存的 MSI 是非常罕见的。这基本上意味着您在没有经过彻底测试的情况下搞砸了并运送了产品。我会发布一个独立的实用程序,让客户在运行升级之前达到满意的状态。

    如果您真的希望它是第一步,我会为 MSI 构建一个 setup.exe,然后在启动主 MSI 之前将清理器连接到其中。

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2014-03-29
      • 2017-01-27
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多