如何通过 Wix Bootstrapper 在修改模式下添加包?

Posted

技术标签:

【中文标题】如何通过 Wix Bootstrapper 在修改模式下添加包?【英文标题】:How to add package in Modify mode via Wix Boostrapper? 【发布时间】:2020-03-10 08:17:41 【问题描述】:

我有几个包和自定义 BA 的 wix 捆绑包。所有软件包都有 InstallCondition 属性。所有软件包单独安装成功。但是如果我安装了一些包,然后尝试在修改模式下添加其他包,它们并没有安装。 InstallCondition 评估为 true,并且 Cache="always"。日志是这样的(Package1已安装,Package2我要添加):

检测到的包:Package1.msi,状态:存在,缓存:完成

检测到的包:Package2.msi,状态:不存在,缓存:完成

...

将字符串变量 'Package1' 设置为值 'true'

将字符串变量“Package2”设置为值“true”

...

条件 'Package1 = "true"' 的计算结果为真。

条件 'Package2 = "true"' 的计算结果为真。

...

计划的包:Package1.msi,状态:存在,默认请求: 存在,请求:存在,执行:无,回滚:无,缓存: 不,取消缓存:不,依赖:注册

计划包:Package2.msi,状态:不存在,默认请求: 缺席,请求:缺席,执行:无,回滚:无,缓存: 否,取消缓存:否,依赖项:无

在修改模式下删除部分包也成功运行。

【问题讨论】:

嗨,不确定我是否正确理解了这个问题。您正在尝试根据 InstallCondition 安装自定义 BA 的某些(不是全部)MSI 部分。正确的? DetectPackage 状态由自定义 BA 调用,并根据安装在目标机器上的 MSI 的当前状态,决定第一阶段,即 DetectedPackage 状态。恕我直言,这是 WiX BA 默认执行的操作,它不能被覆盖。但是,根据 InstallCondition,您可以决定下一步行动 - 如果这是您想要实现的目标。 @ArNumb 不,问题是我无法理解如何在第一次安装时跳过 Burn 安装包。我以为我需要 LaunchAction Modify,然后通过自定义 BA 将 InstallCondition 评估为 true。我做到了,但这不是解决方案。 【参考方案1】:

终于解决了将 LaunchAction = "Modify" 更改为 LaunchAction = "Install" 的问题。效果很好,但我仍然不明白如何使用 LaunchAction = "Modify",为什么我可以删除包,但不能添加。

【讨论】:

【参考方案2】:

在 LaunchAction = "Modify" 期间,引擎默认不安装包。您可以通过日志的default requested: Absent 部分看到这一点。如果自定义 BA 想要在 Modify 期间安装包,则需要在 Plan 期间更改请求的状态(使用 OnPlanPackageBegin 方法的 pRequestedState 参数)。请注意,更改默认状态可能会导致不需要的情况,例如在卸载捆绑包时安装包,因此请彻底测试。

【讨论】:

以上是关于如何通过 Wix Bootstrapper 在修改模式下添加包?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 wix bootstrapper 自动下载先决条件

如何确定 WIX Bootstrapper 中是不是安装了 dotnet 和 VSTORuntime

从 Wix Bootstrapper Bundle 检查文件版本

找出为啥 Wix Bootstrapper 构建了一个“无效”的 MSI

WiX-Bootstrapper - 为 UAC 对话框设置产品名称和公司名称

WiX Bootstrapper 项目结构