【问题标题】:How to set the level of feature based on condition in wix?如何在wix中根据条件设置功能级别?
【发布时间】:2021-12-02 18:48:37
【问题描述】:

我正在尝试根据条件安装功能。最初我将功能级别设置为 1 并在功能内放置一个条件以修改功能级别。

我无法修改功能级别,无论条件如何,它始终设置为 1。

<Feature
        Id = "AddinsFeature"
        Title  = "InstallAddin"
        Level  = "1"
        Absent="allow">
      <ComponentRef Id = "AddInComp"/>
        <Condition Level="0">
          <![CDATA[FALSE]]>
        </Condition>
</Feature>

【问题讨论】:

  • 您应该仔细查看安装日志文件。 INSTALLLEVEL 属性可以被许多其他属性覆盖。详情见此链接:msdn.microsoft.com/en-US/library/aa369536.aspx.
  • 关于调试日志文件的注释很好。我遇到了类似的问题,为了简单的事情浪费了很多时间。在互联网上阅读了这么多东西并在堆栈溢出之后,我看到了您的帮助提示。我将日志文件输出添加到 msiexec 命令中,可以看到真正的问题。对于其他人:通过以下方式创建日志文件:msiexec /i myInstaller.msi [...] /l myLogfile.txt

标签: wix


【解决方案1】:

这里基本上解释了如何使用 WiX 功能条件: https://www.firegiant.com/wix/tutorial/getting-started/conditional-installation/

要将功能设置为您的条件指定的级别,条件必须评估为真。您可以通过将其设置为 1 来强制它为真:

<Feature Id="AddinsFeature" Title="InstallAddin" Level="1" Absent="allow">

  <!-- Force condition to be true, which sets the feature to the Level attribute value -->
  <Condition Level="0">1</Condition>

  <ComponentRef Id = "AddInComp"/>
</Feature>

在上面我们强制功能的安装级别为 0,因为它的条件 1 为真(在 MSI 逻辑中,数字 1 为真 - 根据定义 - 如布尔值)。在现实世界中,情况会更加复杂 - 当然。

每个设置都有一个整体INSTALLLEVEL - and it acts as a high water mark as explained here by Chris Painter。评估为低于或在 INSTALLLEVEL 的功能级别的每个功能都会默认安装。

注意:当您在 WiX 源中设置 Feature level to 0 时,该功能不会在设置 GUI 中显示,而是不是 也将默认安装(更多详细信息在下面的链接中)。

特征操作可能非常复杂。几个链接:

【讨论】:

    【解决方案2】:

    您可以通过将条件设置为“真”来发送功能中存在的组件,如下所示。每当属性“SAMPLEFEATURE_UNLOCKED”设置为 true 时,该功能就会被解锁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2020-10-15
      相关资源
      最近更新 更多