installer - etiquetas - metaetiqueta wix
¿Cómo usar módulos de fusión configurables en Wix? (3)
AFAIK está hecho así:
Producto:
<Merge Id ="HelpInstaller" SourceFile="HelpInstaller.msm" Language="1033" DiskId="1">
<ConfigurationData Name="SurpressInstallation_Config" Value="&HelpFeature"/>
</Merge>
Módulo de fusió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 se muestra 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 puede decirme 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
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 usar el estado de acción de uno de los componentes en el módulo de fusión para su condición.
Por ejemplo, si component1 tiene file1 y necesita que customaction1 se active cuando este componente / archivo se esté instalando, entonces usaría una expresión de:
$ component1 = 3 // INSTALLSTATE_LOCAL
De esta forma, 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 está en el nivel de componente.
Si la función que intentas desactivar es una función diferente, entonces todo esto debe moverse a un módulo de fusión diferente que se fusionará en esa función. Es posible que necesite crear un componente ficticio para asociarlo.
Ahora bien, si desea ignorar todos estos consejos, mire el operador de estado de Acción de la característica y conéctelo bien.
Eso suena como un error. Al menos debería obtener un mensaje de error más descriptivo que explique qué salió mal. Siéntase libre de presentar el error en http://wixtoolset.org/bugs
Debe definir el nodo Configuración bajo el 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>