2010-01-19 19 views
6

per quanto ne so si è fatto in questo modo:Come utilizzare i moduli di unione configurabili in Wix?

prodotto:

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

modulo di unione:

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

Ma quando ho fatto come sopra ho un errore: Incontrato un errore di fusione imprevisto di tipo 'msmErrorDataRequestFailed' per il quale al momento non c'è nessun messaggio di errore da visualizzare.

Qualcuno può dirmi come risolvere questo problema? Quello che fondamentalmente voglio fare è eseguire un'azione personalizzata nel modulo unione solo quando viene selezionata una determinata funzione. È questo il modo giusto per farlo? Grazie Daniel

risposta

0

Una funzione ha una dipendenza da un modulo di unione, non il contrario. Nulla nel modulo di unione dovrebbe avere un riferimento a qualcosa che non sia un modulo di unione, come ProductName, ProductCode o Feature nome, poiché ciò accopperebbe strettamente il modulo di unione a un prodotto specifico piuttosto che un modulo riutilizzabile generico. Fare ciò creerebbe essenzialmente un riferimento circolare e non è un'idea.

Ciò che è probabilmente necessario (difficile da dire senza conoscere ulteriori informazioni) è quello di utilizzare lo stato di azione di uno dei componenti nel modulo unione per la condizione.

Per esempio, se Component1 ha file1 ed è necessario customaction1 al fuoco quando viene installato questo/file del componente, allora devi usare l'espressione di:

$ Component1 = 3 // INSTALLSTATE_LOCAL

questo modo se questo modulo di unione viene unito a Product1, Product 2 o Product3 con Feature Name A, B o C, non importa perché l'associazione si trova a livello di componente.

Se la funzione che si sta tentando di collegare è una funzione diversa, è necessario spostarla in un modulo di unione diverso che viene unito a quella funzione. Potrebbe essere necessario creare un componente fittizio a cui associarsi.

Ora se si desidera ignorare tutti questi consigli, osservare l'operatore di stato dell'azione funzione e accoppiare saldamente.

Conditional Statement Syntax

1

Che suona come un insetto. Dovresti almeno ottenere un messaggio di errore più descrittivo che spieghi cosa è andato storto. Sentitevi liberi di depositare il bug a http://wixtoolset.org/bugs

5

È necessario definire nodo Configurazione sotto modulo:

<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> 
Problemi correlati