我的解决方案中有多个WiX安装程序项目。并且Product元素下的主wxs文件中的所有安装程序都具有相同的启动条件列表,例如特权、目标机器上的操作系统版本、是否安装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>
所以我想知道是否有可能将这些条件移动到我的解决方案中的共享公共项目中,我可以从所有安装程序项目中引用该项目,并从该共享位置注入条件?
如果你只共享这些启动条件,那么考虑使用include文件。条件将为每个项目单独编译,而不是一次编译,但是您可以轻松地包含它们,而无需创建共享的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?>
WiX没有ConditionRef元素。这很遗憾,因为它可能应该。然而,片段是自动消耗的,所以如果你把它们和其他东西放在一起,比如属性,你可以引用属性,把它们放在一起。
我不知道你希望你的条件表有多干净,但另一个概念是把所有的条件放在一个片段中,并与所有的项目共享它们。然后为每个条件设置一个启用属性。这样,只有设置了属性,条件才会计算。
这是我16年前写的....如果你想做这样的事,我很乐意帮忙。
http://blog.iswix.com/2006/07/short-comings-of-launchconditions.html