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

时间:2013-04-24 02:47:20

标签: wix installation burn

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

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的这种使用模式不是标准用户界面应该支持的关键使用模式之一......

1 个答案:

答案 0 :(得分:6)

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

<MsiPackage Id='Msi1' InstallCondition='Checkbox1' SourceFile='path\to\msi1.msi' />

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

<Variable Name='Checkbox1` Value='1' Persisted='yes' />

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

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