5

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

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

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

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

4

2 回答 2

6

我找到了我的答案。我需要的条件标记是这样的:

<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意味着这是我们将卸载此功能的时间(它是现在安装,我们正在删除它)。

此页面上有关这些条件的更多信息。

于 2014-02-12T23:50:57.307 回答
1

您可以使用有关功能状态或组件状态的条件语句,如此处所述。这样,您应该能够检查是否选择了要安装的功能。

于 2014-02-12T08:49:30.247 回答