有没有一个变量我可以查询,以了解是否在FeaturesDlg中选择了安装功能



我使用的是与WixUI_Advanced的自定义偏差,该偏差使用FeaturesDlg来选择要安装的组件。其中一个组件的安装需要自定义操作,但如果不安装该功能,我不想运行该自定义操作。是否有某种方法可以查询安装程序会话或其他内容,并为我的自定义操作建立一个条件,以便它只有在选择了此功能时才会启动?

编辑:我应该澄清一下,我正在寻找可以在.wxs中使用的语言,以确定是否已选择该功能。像这样的东西,只有我没有编的真正的代码:

<!--NOT REAL CODE-->
<Custom Action="ThingToDoIfFeatureSelected"  Before="InstallFinalize">
$(sys.MyFeatureSessionInformation.Level) > 1
</Custom>

我知道这些信息在运行时必须存在于会话中,否则安装程序将无法安装正确的功能,但我找不到任何引用这些会话信息的WIX语言的引用。我无法更改自定义操作本身中的代码,因此我需要在WIX标记中测试此条件。

我找到了答案。我需要的条件是:
<Custom Action="ThingToDoIfFeatureSelected"  Before="InstallFinalize">
<![CDATA[ADDLOCAL >< "MyFeatureName"]]>
</Custom>

全局变量ADDLOCAL包含将在本地安装的功能的列表。它是一个简单的逗号分隔字符串,因此如果我的特性在列表中,则测试第一个字符串是否包含第二个字符串的><运算符将返回true。CDATA使我不必退出><。如果没有它,><必须写成&gt;&lt;

在我的情况下,我已经通过在我的功能中添加以下属性将安装限制为本地:InstallDefault="local"。因此,如果我的功能不在ADDLOCAL中,它就不会被安装。如果我没有限制安装位置,我将不得不检查每一个可能的位置,比如:

<Custom Action="ThingToDoIfFeatureSelected"  Before="InstallFinalize">
<![CDATA[ADDLOCAL >< "MyFeatureName" OR ADDSOURCE >< "MyFeatureName" OR ADDDEFAULT >< "MyFeatureName"]]>
</Custom>



替代解决方案:我为我的场景找到了另一个更简单、更准确的解决方案,它检查"功能操作"。条件&MyFeatureName=3意味着这是我们要安装此功能的特定时间(它还没有安装,我们现在正在进行安装。)同样,条件MyFeatureName=2意味着这将是我们卸载此功能的时间(它现在已经安装,我们正在删除它)。

有关这些条件的详细信息,请参阅本页。

您可以使用关于Feature或Component状态的条件语句,如下所述。通过这种方式,您应该能够检查是否已选择要安装的功能。

最新更新