簡體   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