nuevo día, nuevo problema ;-) Aún tiene problemas con la acción personalizada administrada. Ya logré llamar una acción personalizada y pasarle algunos datos de prueba. Ahora quiero reemplazar los datos de prueba con los datos reales que necesito. Y aquí comienza el problema: quiero llamar a un archivo por lotes que se instaló en un subdirectorio de mi instalación. Por lo tanto, necesito pasar la ruta de instalación a la acción personalizada. Afaik esto se puede hacer utilizando el mecanismo customactiondata. Pero esto no funciona. Cuando registro la instalación, puedo ver que fuera de la ubicación INSTALLLOCATION de customaction está apuntando a la ruta correcta, pero tan pronto como miro en el customaction la propiedad customactiondata está vacía ...WiX: Pasando Instalar ruta de acceso a la acción personalizada administrada
¿Alguien puede echar un vistazo a mi código y dame una pista de lo que estoy haciendo mal? Gracias de antemano!
módulo de combinación que llama a la acción personalizada:
<Module Id="DflHelpInstaller" Language="1033" Version="1.0.0.0">
<Package Id="f952de58-1dc6-46b3-872a-7a49e2d9ea0a" Manufacturer="DflHelpInstaller" InstallerVersion="200" />
<Binary Id='RegisterDflHelpDll' SourceFile="$(var.REGISTERHELP.TargetDir)RegisterDflHelp.CA.dll" />
<CustomAction Id='RegisterDflHelp' BinaryKey='RegisterDflHelpDll' DllEntry='RegisterDflHelp' Execute='deferred' />
<CustomAction Id="RegisterDflHelp.SetProperty" Return="check" Property="RegisterDflHelp" Value='[INSTALLLOCATION]' Execute='immediate' />
<InstallExecuteSequence>
<Custom Action='RegisterDflHelp.SetProperty' After='CostFinalize' />
<Custom Action='RegisterDflHelp' After='InstallFiles' />
</InstallExecuteSequence>
<Directory Id="TARGETDIR" Name="SourceDir">
</Directory>
<ComponentGroupRef Id="HelpGroup"/>
</Module>
</Wix>
Esquema del Proyecto de instalación que utilizan el MergeModule:
....
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" SourceName="PFFiles">
<Directory Id="Company" Name='$(var.COMPANY)'>
<Directory Id="INSTALLLOCATION" SourceName='$var.v[SDK_VERSION]'>
<Component Id="MyBanner" Guid="C8C28B92-9326-4991-BFB1-BBDFDF3653AB">
<File Id ="Banner.bmp" Source="Banner.bmp" KeyPath="yes" DiskId="1"/>
</Component>
<Merge Id ="DflHelpInstaller" SourceFile="DflHelpInstaller.msm" Language="1033" DiskId="1" />
</Directory>
</Directory>
....
<Feature Id="Complete" Title="Setup" Description="Installs the SDK on your local machine." Display="expand" Level="1" ConfigurableDirectory="INSTALLLOCATION">
<ComponentRef Id="Banner" />
<ComponentRef Id ="UNINSTALLER"/>
<ComponentGroupRef Id="ReferenceGroup"/>
<MergeRef Id="DflHelpInstaller"/>
</Feature>
CustomAction:
public class CustomActions
{
[CustomAction]
public static ActionResult RegisterDflHelp(Session session)
{
session.Log("Begin CustomAction1");
session.Log("Before Access to customactiondata");
//should contain the installation path - unfortunatelly it is empty! why?
string cad = session["CustomActionData"];
Debugger.Break();
RegisterHelp(cad);
session.Log("End of custom action..");
return ActionResult.Success;
}
No si se trata de una secuencia "diferida", que es lo que está haciendo. Solo unas pocas propiedades están disponibles en secuencia diferida. –