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