【问题标题】:Install features in multiple MSi in WiX在 WiX 中的多个 MSi 中安装功能
【发布时间】:2013-02-15 14:45:52
【问题描述】:

我正在为企业产品开发 Windows 安装程序,该产品具有不同的变体作为单独的 MSI 产品。我们必须检查,如果已经安装了另一个变体,我们无法安装产品。我创建了不同的 WIX 脚本并将它们构建为单独的产品 (MSI)。

每个变体都有一个基本框架和多个模块。我将每个模块创建为一个功能,并根据构建的变体将它们与基本功能一起包含(现在必须安装基本功能)。

我收到要求,我们必须允许在任何已安装的变体之上安装另一个变体。例如,我安装了 Product1,它具有 2 个模块以及基本框架作为三个功能(Base、Mod1、Mod2)。 Product2 使用 Base 和 Mod3 构建。现在,当我在安装了 Product1 的系统中安装 Product2 时,应该只安装 Mod3。

我使用的是 WIX 3.5。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    如果不进行测试,我会说您可以使用 ComponentSearch 进行此操作。定义这样的搜索,搜索产品 1 的组件并将结果写入变量。然后您可以检查该变量是否不为空,以确定产品 1 是否已安装。

     <Property Id="EXISTING_PRODUCT">
          <ComponentSearch Id="SearchMyProduct" Guid="{YOUR-OWN-GUID}" Type="file"/>
    </Property>
    

    然后您可以在功能中使用Condition

    <Feature Title="Product2">
        <Condition Level="0">EXISTING_PRODUCT <> ""</Condition>
    </Feature>
    

    您还可以使用 CustomAction 根据搜索结果定义所需的值,以禁用 Feature。 (应该是 Level 的值)。

    我没有测试过这种方式,但我认为它应该可以工作。请尝试并提供反馈。

    附加链接:

    http://wix.tramontana.co.hu/tutorial/getting-started/conditional-installation

    【讨论】:

    • 谢谢马丁。让我用我的 WIX 项目检查一下。
    • 这对我有用。但我必须妥协我的自定义操作。我正在重新编写安装和卸载的自定义操作。接受答案。
    • 我必须使用 Property@Secure="yes" 进行卸载才能正确处理这种情况。否则卸载时忽略该属性。
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多