2010-01-19 32 views
6

據我所知,它的完成這樣的:如何在Wix中使用可配置的合併模塊?

產品:

<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',其中當前沒有顯示錯誤消息。

誰能告訴我如何解決這個問題?我基本上想要做的是僅在選擇某個特徵時纔在合併模塊中執行自定義操作。這是正確的方法嗎?謝謝丹尼爾

回答

0

功能有依賴於合併模塊,而不是相反。合併模塊中的任何內容都不應引用合併模塊以外的任何內容,例如ProductName,ProductCode或Feature名稱,因爲這會將合併模塊緊密地耦合到特定產品,而不是通用的可重用模塊。這樣做基本上會創建一個循環引用,而不是想法。

你可能需要(很難說,不知道更多的信息)是使用合併模塊中的一個組件的動作狀態爲您的條件。

例如,如果COMPONENT1有文件1,你需要customaction1火時,將安裝此組件/文件,然後你會使用的一種表達:

$ COMPONENT1 = 3 // INSTALLSTATE_LOCAL

這樣如果此合併模塊合併到具有功能名稱A,B或C的Product1,Product 2或Product3中,則該關聯無關緊要,因爲該關聯處於組件級別。

如果您試圖綁定的功能是一個不同的功能,那麼這一切都需要移入合併到該功能中的不同合併模塊。您可能需要創建一個虛擬組件以關聯到。

現在,如果您想忽略所有這些建議,請查看功能操作狀態操作員並緊密結合。

Conditional Statement Syntax

1

這聽起來像一個錯誤。你至少應該得到一個更具描述性的錯誤信息,解釋出了什麼問題。隨時http://wixtoolset.org/bugs

5

提交的bug你必須在模塊定義配置節點:

<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> 
相關問題