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

How to add package in Modify mode via Wix Boostrapper?

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

Detected package: Package1.msi, state: Present, cached: Complete

Detected package: Package2.msi, state: Absent, cached: Complete

...

Setting string variable 'Package1' to value 'true'

Setting string variable 'Package2' to value 'true'

...

Condition 'Package1 = "true"' evaluates to true.

Condition 'Package2 = "true"' evaluates to true.

...

Planned package: Package1.msi, state: Present, default requested: Present, ba requested: Present, execute: None, rollback: None, cache: No, uncache: No, dependency: Register

Planned package: Package2.msi, state: Absent, default requested: Absent, ba requested: Absent, execute: None, rollback: None, cache: No, uncache: No, dependency: None

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

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

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