2010-01-19 15 views
6

yo sepa que está hecho así:¿Cómo usar módulos de combinación configurables en Wix?

producto:

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

módulo de combinación:

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

Pero cuando lo hice como arriba recibo un error: Encontré un error de fusión inesperado de tipo 'msmErrorDataRequestFailed' para el cual no hay actualmente ningún mensaje de error para mostrar.

¿Alguien me puede decir cómo resolver ese problema? Lo que básicamente quiero hacer es ejecutar una acción personalizada en el módulo de fusión solo cuando se selecciona una determinada función ... ¿Es esta la manera correcta de hacerlo? Gracias Daniel

Respuesta

0

Una característica tiene una dependencia en un módulo de fusión, y no al revés. No hay nada en el módulo de fusión que deba hacer referencia a algo que esté fuera del módulo de combinación, como ProductName, ProductCode o Feature name, ya que eso vincularía estrechamente el módulo de fusión a un producto específico en lugar de ser un módulo genérico reutilizable. Hacer esto esencialmente crearía una referencia circular y no es una idea.

Lo que probablemente necesite (difícil de decir sin saber más información) es utilizar el estado de acción de uno de los componentes en el módulo de combinación para su condición.

Por ejemplo, si tiene Component1 archivo1 y que necesita customaction1 para disparar cuando este componente/archivo está siendo instalado a continuación, tendrá que utilizar una expresión de:

$ Component1 = 3 // INSTALLSTATE_LOCAL

De esa manera si este módulo de fusión se fusiona en Producto1, Producto 2 o Producto3 con Nombre de función A, B o C, no tendrá importancia porque la asociación se encuentra en el nivel de componente.

Si la característica que intentas conectar es una característica diferente, entonces todo esto debe moverse a un módulo de fusión diferente que se fusionará en esa característica. Es posible que necesite crear un componente ficticio para asociarlo.

Ahora, si desea ignorar todos estos consejos, mire el operador de estado de Acción de la característica y apriételo bien.

Conditional Statement Syntax

1

Eso suena como un error. Al menos debería obtener un mensaje de error más descriptivo que explique qué salió mal. No dude en presentar el fallo en http://wixtoolset.org/bugs

5

Usted tiene que definir nodo Configuración de bajo módulo:

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