【发布时间】:2011-02-28 20:07:18
【问题描述】:
我有一个 msi(使用 WIX 编写),它有一个绑定到自定义属性(称为 MY_PROPERTY)的复选框。我想从命令行运行这个 msi,为此属性指定 0(未选中)或 1(选中)。我的脚本将确定适当的值(基于环境)并将该值注入 msiexec 命令行。我的命令行如下所示:
msiexec /i my_installer.msi MY_PROPERTY=$value
其中 $value 是 1 或 0,具体取决于环境。问题是,无论我在命令行中为 MY_PROPERTY 提供什么值,都始终选中该复选框(并且该属性将始终设置为 1)。使复选框未选中的唯一方法是不指定属性(使其未定义)。需要注意的是,无论 UI 是否显示,都会发生这种行为(在上述命令行中添加“/quiet”不会改变这种行为)。
This msdn post 似乎表明这是 Windows 安装程序中的一个已知“错误”(或者更准确地说,无论创作系统编写了 msi)。建议使用构建后的 msi hack 作为解决方案。我想知道是否有人遇到过此问题并提出更好的解决方法/解决方案。谢谢!
更新
我看到了这个问题的三个解决方案:
- 来自@Damien,让包装脚本在其值为 0 时不将属性传递给 msiexec。这会使脚本更加复杂,并且可能会阻止我覆盖默认为“已选中”的复选框的值”。
- 来自@Michael Urman,添加一个自定义操作,如果该属性的值为零,则清除该属性。这使得 msi 更加复杂,我必须为 UI 中的每个复选框添加这样的自定义操作。
- 另一个想法是简单地禁止在我们的 msi 安装程序中使用复选框,并使用单选框或下拉菜单来代替“真/假”问题。虽然这限制了我们安装程序的 UI 选项,但它可以让包装脚本保持简单,并且不需要自定义操作来“破解”属性。
我目前倾向于选项 3,尽管选项 1 可能是我最初问题的最佳答案。有什么想法吗?
【问题讨论】:
-
我终于看到了你的更新,并且有一个建议来解决对许多 set-property 操作的需求。不过,我更喜欢@Damien 的建议,以便在调用 MSI 时处理这个问题。
标签: wix windows-installer