繁体   English   中英

如何在Wix中使用可配置的合并模块?

[英]Howto use configurable Merge Modules in Wix?

AFAIK这样做:

产品:

<Merge Id ="HelpInstaller" SourceFile="HelpInstaller.msm" Language="1033" DiskId="1">
                <ConfigurationData Name="SurpressInstallation_Config" Value="&amp;HelpFeature"/>
 </Merge>

合并模块:

<Property Id="SupressInstallation" Value='0'  />

<Substitution Table='CustomAction' Row='SetSupressInstallationProperty' Column='Target' Value='[=SupressInstallation_Config]'/>
<CustomAction Id='SetSupressInstallationProperty' Property='SupressInstallation'      Value='[SupressInstallation]'/>  
<InstallExecuteSequence>
  <Custom Action='SetSupressInstallationProperty' Before='RegisterHelp' />
  <Custom Action='RegisterHelp' After='CostFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) AND SupressInstallation = 3) </Custom>
</InstallExecuteSequence>

但是,当我这样做时,我得到一个错误:遇到类型'msmErrorDataRequestFailed'的意外合并错误,其中当前没有错误消息显示。

谁能告诉我如何解决这个问题? 我基本上想要做的是仅在选择某个功能时才在合并模块中执行自定义操作。这是正确的方法吗? 谢谢Daniel

您必须在模块下定义配置节点:

<Property Id="SupressInstallation" Value='0'  />
<Configuration Name="SupressInstallation_Config" Format="Text"/>
<Substitution Table='CustomAction' Row='SetSupressInstallationProperty' Column='Target' Value='[=SupressInstallation_Config]'/>
<CustomAction Id='SetSupressInstallationProperty' Property='SupressInstallation'      Value='[SupressInstallation]'/>  
<InstallExecuteSequence>
  <Custom Action='SetSupressInstallationProperty' Before='RegisterHelp' />
  <Custom Action='RegisterHelp' After='CostFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) AND SupressInstallation = 3) </Custom>
</InstallExecuteSequence>

这听起来像个bug。 你应该至少得到一个更具描述性的错误信息,解释出现了什么问题。 请随意在http://wixtoolset.org/bugs上提交错误

功能依赖于合并模块,而不是相反。 合并模块中的任何内容都不应该引用合并模块之外的任何内容,例如ProductName,ProductCode或Feature名称,因为这会将合并模块紧密耦合到特定产品,而不是通用的可重用模块。 这样做基本上会创建一个循环引用,并不是一个想法。

您可能需要的(在不知道更多信息的情况下很难说)是使用合并模块中某个组件的操作状态来处理您的情况。

例如,如果component1具有file1,并且在安装此组件/文件时需要触发customaction1,那么您将使用以下表达式:

$ component1 = 3 // INSTALLSTATE_LOCAL

这样,如果此合并模块合并到具有功能名称A,B或C的Product1,Product 2或Product3,则无关紧要,因为关联位于组件级别。

如果您尝试绑定的功能是一个不同的功能,那么这一切都需要移动到另一个合并模块中,该模块将合并到该功能中。 您可能需要创建要关联的虚拟组件。

现在,如果您想忽略所有这些建议,那么请查看功能操作状态操作符并紧密耦合。

条件语句语法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM