Wix引导程序烧伤有条件地显示标签

问题描述

我正在根据wix刻录安装程序正在执行的操作来显示“安装”或“卸载”标签。到目前为止,我已经尝试过:

<?define InstallStatus=[WixBundleAction]?>
    <?if $(var.InstallStatus) = 5?>
    <Variable Name="StatusLabel" Value="Install"/>
    <?else ?>
    <Variable Name="StatusLabel" Value="Uninstall"/>
    <?endif ?>

但是它总是返回卸载。当我检查日志文件时,得到了初始化字符串变量'StatusLabel'值为'Uninstall'。

当我尝试打印InstallStatus时,它没有值(“”)。似乎直到那时才设置。

还有其他方法可以实现吗?

解决方法

<?define InstallStatus=[WixBundleAction]?>是在编译时评估的预处理程序代码,而WixBundleAction是直到运行时才可用的Burn变量。在v3.x中,您必须编写代码以在运行时设置变量。在第4版中,在#4948中实现了一个新的SetVariable元素,该元素允许以声明方式设置变量,就像您尝试做的那样。

如果您使用的是wixstdba,那么您可能想了解#4149,它增加了对显示安装和卸载消息的支持。