我使用WixUI_Advanced的自定义偏差,它使用FeaturesDlg选择要安装的组件。其中一个组件需要安装自定义操作,但如果我不安装该功能,我不想运行该自定义操作。有没有办法查询安装程序会话或某些内容并为我的自定义操作构建一个条件,以便只有在选择了此功能时它才会触发?
编辑:我应该澄清一下,我正在寻找可以在.wxs中使用的语言,以确定是否已选择该功能。像这样的东西,只有我没有弥补的真实代码:
<!--NOT REAL CODE-->
<Custom Action="ThingToDoIfFeatureSelected" Before="InstallFinalize">
$(sys.MyFeatureSessionInformation.Level) > 1
</Custom>
我知道这些信息必须在运行时存在于会话中,否则安装程序将无法安装正确的功能,但我找不到任何引用此会话信息的WIX语言的引用。我无法更改自定义操作本身的代码,因此我需要在WIX标记中测试此条件。
答案 0 :(得分:6)
我找到了答案。我需要的标记是:
<Custom Action="ThingToDoIfFeatureSelected" Before="InstallFinalize">
<![CDATA[ADDLOCAL >< "MyFeatureName"]]>
</Custom>
全局变量ADDLOCAL包含将在本地安装的功能列表。它是一个简单的逗号分隔字符串,因此如果第一个字符串包含第二个字符串,><
运算符将返回true,如果我的功能在列表中。 CDATA阻止我逃离><
。没有它,><
必须写为><
在我的情况下,我已经通过将此属性添加到我的功能{} {}来限制安装到本地。因此,如果我的功能不在ADDLOCAL中,则不会安装它。如果我没有限制安装位置,我必须检查每个可能的位置,如下所示:
InstallDefault="local"
备用解决方案:我为我的方案找到了另一种更简单,更精确的解决方案,用于检查“功能操作”。条件<Custom Action="ThingToDoIfFeatureSelected" Before="InstallFinalize">
<![CDATA[ADDLOCAL >< "MyFeatureName" OR ADDSOURCE >< "MyFeatureName" OR ADDDEFAULT >< "MyFeatureName"]]>
</Custom>
表示这是我们要安装此功能的特定时间(它尚未安装,我们现在正在进行安装。)同样,条件&MyFeatureName=3
表示这个是我们何时将卸载此功能(现在已安装,我们将其删除)。
this page上有关这些条件的更多信息。
答案 1 :(得分:1)
您可以使用有关如here所述的功能或组件状态的条件语句。这样您就可以检查是否已选择安装功能。