使用WiX Burn选择要安装/修改/卸载的.msi

use*_*654 3 installation wix burn

我在看这里提出的解决方案:

WiX Burn - 确定已安装的项目

但我不知道这对于"修改"刻录屏幕(当有人决定删除某个.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'
Run Code Online (Sandbox Code Playgroud)

(等等.)

[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
Run Code Online (Sandbox Code Playgroud)

所以,这让我想知道,各种.msi存储的"检测"结果在哪里?为什么不能将它们存储到我自己的变量'Checkbox1'中,我后来用它来设置复选框的值,是否已选中?

作为一个更基本的问题,Burn的这种使用模式不是标准UI中应该得到很好支持的关键使用模式之一......

Rob*_*ing 7

您可以通过设置包的InstallCondition属性来控制是否应安装包.例如,如果Checkbox1确定是否Msi1应该安装,那么您的链可能具有:

<MsiPackage Id='Msi1' InstallCondition='Checkbox1' SourceFile='path\to\msi1.msi' />
Run Code Online (Sandbox Code Playgroud)

您可能希望定义您的Checkbox1变量,使其保持其值:

<Variable Name='Checkbox1` Value='1' Persisted='yes' />
Run Code Online (Sandbox Code Playgroud)

注意:默认情况下,Msi1应假定应安装此值,因为该值默认为'1'.

唯一剩下的就是Checkbox1在wixstdba中绑定你的UI.您可以通过覆盖主题文件并将复选框添加到用作控件的Options页面来Checkbox1执行@Id此操作.