我可以将常见的安装条件移动到共享的 WiX 安装程序项目吗

Can I move common install conditions to a shared WiX Installer project

我的解决方案中有多个 WiX 安装程序项目。并且 Product 元素下主 wxs 文件中的所有安装程序都具有相同的启动条件列表,例如权限、OS 目标机器上的版本、是否安装了 NET48 框架等

<Condition Message="You need to be an administrator to install this product.">
  Privileged
</Condition>

<Condition Message='This product is designed to be installed on Windows 7 or higher Windows Operating System'>
  <![CDATA[VersionNT64 >= 601]]>
</Condition>

<PropertyRef Id='WIXNETFX4RELEASEINSTALLED'/>
<Condition Message='This setup requires the .NET Framework 4.8 to be installed.'>
  <![CDATA[Installed OR (WIXNETFX4RELEASEINSTALLED >= "#528040")]]>
</Condition>

所以我想知道是否可以将这些条件移动到我的解决方案中的共享公共项目中,以便我可以从我的所有安装程序项目中引用该项目并从该共享位置注入条件?

WiX 没有 ConditionRef 元素。这是一个耻辱,因为它可能应该。然而,碎片是自动消耗的,所以如果你把它们和 属性 之类的东西放在一起,你可以引用 属性 并将它们放在一起。

我不知道你想要你的条件有多干净table但另一个概念是将你所有的条件放在一个碎片中并与你的所有项目共享。然后为每个条件启用 属性。这样,条件仅在设置 属性 时才计算。

这是我 16 年前写的东西......如果你想做这样的事情,我很乐意提供帮助。

http://blog.iswix.com/2006/07/short-comings-of-launchconditions.html

如果您只是共享那些启动条件,请考虑使用包含文件。条件将为每个项目单独编译,而不是一次编译,但是您可以轻松地包含它们,而无需创建共享的 wixlib。

<?xml version="1.0" encoding="UTF-8"?>
<!-- LaunchConditions.wxi -->
<Include>
  <Condition Message="You need to be an administrator to install this product.">
    Privileged
  </Condition>

  <Condition Message='This product is designed to be installed on Windows 7 or higher Windows Operating System'>
    <![CDATA[VersionNT64 >= 601]]>
  </Condition>

  <PropertyRef Id='WIXNETFX4RELEASEINSTALLED'/>
  <Condition Message='This setup requires the .NET Framework 4.8 to be installed.'>
    <![CDATA[Installed OR (WIXNETFX4RELEASEINSTALLED >= "#528040")]]>
  </Condition>
</Include>

然后在每个项目中包含它

<?include LaunchConditions.wxi?>