WiX: passage du chemin d'installation à l'action personnalisée managée
nouvelle Journée, nouveau Problème;-) Toujours à la lutte avec la gestion de l'action personnalisée. J'ai déjà réussi à l'appel d'une action personnalisée et le passage de quelques données de test. Maintenant, je veux remplacer le testdata avec les vraies données dont j'ai besoin. Et là, les problèmes commencent: je veux appeler un fichier de commandes qui a été installé dans un sous-répertoire de mon installation. Donc j'ai besoin de passer le chemin d'installation à l'action personnalisée. Autant que je sache, cela peut être fait à l'aide de la customactiondata mechnism. Mais cela ne fonctionne pas. Lorsque je connecte l'installation, je peux voir que l'extérieur de la customaction INSTALLLOCATION vers le chemin correct, mais dès que je me regarde dans le customaction la propriété customactiondata est vide...
Quelqu'un peut jeter un oeil à mon code et me donner une astuce de ce que je fais mal? Grâce à advanvce!
Module de fusion qui appelle l'action personnalisée:
<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>
Contour de l'installateur de Projets qui utilisent la 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;
}
source d'informationauteur Daniel
Vous devez vous connecter pour publier un commentaire.
Si vous délimiter vos données comme ...
Vous pouvez accéder aux données comme:
Dans l'exemple précédent, vous devez utiliser:
puis
Je l'ai accompli à l'aide de la suite dans les .WXS fichier:
Et dans l'Action personnalisée:
Maintenant, je n'ai pas encore compris comment faire pour éviter la répétition du nom de fichier, mais cela ne veut réussir à revenir où le fichier de commandes a été installé.
Votre passage de la valeur correctement, mais d'essayer cette façon de référence.
Cela devrait
cad
pour le chemin d'installation comme vous le souhaitez.Après plusieurs heures de struglling, le suivant a fonctionné pour moi:
Espère que cela aide somenone autre!!!!
Avez-vous essayé d'interroger la INSTALLLOCATION des biens directement à partir de l'géré CA?
L'une des beautés de l'utilisation de la DTF, c'est que vous avez accès en lecture/écriture à tous les MSI propriétés sans avoir à utiliser des lignes de commande etc. Donc, même si INSTALLLOCATION ne peut pas être interrogée comme une propriété classique, vous pouvez définir votre propre MSI propriété est définie à la valeur de INSTALLOCATION et à la requête de l'une à l'intérieur de votre CA à la place.