我正在查看此处提供的解决方案:
WiX Burn - Determine what items are already installed
但我不明白这如何适用于“修改”刻录屏幕(当有人决定删除某个 .msi 时)。
当卸载/修改页面出现时查看 Burn .log(我将描述复选框是否被选中的变量称为“Checkbox1”到“Checkbox6”):
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox1' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox2' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox3' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox4' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox5' to value '1'
[171C:1034][2013-04-23T11:49:24]i000: Initializing numeric variable 'Checkbox6' to value '1'
(等等。)
[171C:1034][2013-04-23T11:49:24]i100: Detect begin, 3 packages
[171C:1034][2013-04-23T11:49:24]i000: Setting string variable 'NETFRAMEWORK40' to value '1'
[171C:1034][2013-04-23T11:49:24]i052: Condition 'NETFRAMEWORK40' evaluates to true.
[171C:1034][2013-04-23T11:49:24]i101: Detected package: NetFx40Redist, state: Present, cached: None
[171C:1034][2013-04-23T11:49:24]i101: Detected package: Setup, state: Present, cached: Complete
[171C:1034][2013-04-23T11:49:24]i101: Detected package: Setup1, state: Present, cached: Complete
[171C:1034][2013-04-23T11:49:24]i199: Detect complete, result: 0x0
所以,这让我想知道,各种 .msi 的“检测”结果存储在哪里?为什么不能将它们存储到我自己的变量“Checkbox1”中,以后我会用它来设置复选框的值,无论它是否被选中?
作为一个更基本的问题,Burn 的这种使用模式是不是应该在标准 UI 中得到很好支持的关键使用模式之一......
最佳答案
您可以通过设置包的 InstallCondition
属性来控制是否应安装包。例如,如果 Checkbox1
已确定是否应安装 Msi1
,则您的链可能具有:
<MsiPackage Id='Msi1' InstallCondition='Checkbox1' SourceFile='path\to\msi1.msi' />
您可能想要定义
Checkbox1
变量,使其保持其值:<Variable Name='Checkbox1` Value='1' Persisted='yes' />
注意:默认情况下假定应安装
Msi1
,因为该值默认为 '1'
。剩下的唯一事情就是将您的
Checkbox1
绑定(bind)到 wixstdba 中的 UI。您可以通过覆盖 Theme 文件并将复选框添加到 Options
页面,使用 Checkbox1
作为控件的 @Id
来完成此操作。关于wix - 使用 WiX Burn 选择要安装/修改/卸载的 .msi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16182537/