nuovo giorno, nuovo problema ;-) Devo ancora lottare con un'azione personalizzata gestita. L'ho già gestito per chiamare un'azione personalizzata e passare alcuni dati di test. Ora voglio sostituire i testdata con i dati reali di cui ho bisogno. E qui iniziano i problemi: voglio chiamare un file batch che è stato installato in una sottodirectory della mia installazione. Quindi ho bisogno di passare il percorso di installazione all'azione personalizzata. Afaik questo può essere fatto usando il mechnism customactiondata. Ma questo non funziona. Quando registro l'installazione posso vedere che al di fuori della customaction INSTALLLOCATION punta al percorso corretto, ma non appena guardo nella customaction la proprietà customactiondata è vuota ...WiX: Passare il percorso di installazione all'azione personalizzata gestita
Qualcuno può dare un'occhiata al mio codice e dammi un consiglio su cosa sto facendo male? Grazie in anticipo!
modulo di unione che richiede l'azione personalizzata:
<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>
schema del progetto di installazione che utilizzano il 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;
}
Non se è una sequenza "differita", che è ciò che sta facendo. Sono disponibili solo proprietà manciate in sequenza differita. –