Comment passer des paramètres à l'action personnalisée?
Je suis en train de créer une action personnalisée avec l'attribut "Value", j'ai envie de passer des paramètres au code C# (le TARGETDIR et la version).
Cependant, je reçois un message d'erreur indiquant que DLLENtry et de Valeur ne peuvent pas coexister. Mais l'action personnalisée sans dllentry est pas valide.
C'est le code:
<CustomAction Id="SetMAWPrefferences"
Value="InstallDir=[TARGETDIR];Version=2.0.0.1"
Return="check"
Execute="commit"
BinaryKey="ImportExportBinary"
/>
Et pour cela, j'obtiens cette erreur:
Erreur 9 ICE68: Invalid personnalisé action type d'action "SetMAWPrefferences'.
Toutes les idées comment faire?
OriginalL'auteur Ehud Grand | 2014-11-24
Vous devez vous connecter pour publier un commentaire.
Remarque, vous êtes à l'aide de
Value
attribut dans le mauvais sens:Basé sur la La création de WiX Actions Personnalisées en C# et Passage de Paramètres article, vous devez:
Créer des propriétés avec des valeurs souhaitées:
Créer une action personnalisée pour définir la
InstallDir
propriété:Créer une action personnalisée:
Calendrier des actions personnalisées pour l'exécution pendant le processus d'installation:
Accéder à ces propriétés à partir de votre action personnalisée comme suit:
J'ai mis à jour la réponse, est-ce que cela?
Merci à vous, les valeurs sont de passage! cependant, je reçois [TARGETDIR] comme une chaîne de caractères, et google n'est pas utile - je besoin de le chemin, pas le nom de la propriété.
J'ai mis à jour la réponse encore une fois, j'espère que ça aide.
Execute="commit"
........... pas de.Commit
CAs sont exécutées aprèsInstallFinalize
, et seulement si la restauration est activée. Si vous êtes à la définition des propriétés, ils ont besoin d'être fait dansimmediate
CAs, si vous décidez de changer le système cible, ils ont besoin d'être fait dansdeferred
CAs.Commit
CAs sont, pour le nettoyage des fichiers temporaires après le succès de l'installation.OriginalL'auteur Yuriy
Il y a deux façons de passer des paramètres aux actions personnalisées, on va travailler pour l'exécution immédiate de l'AC et de l'autre on va travailler pour le différé d'actions personnalisées.
Immédiate CA (ne Peut pas être annulée):
Afin de passer des arguments à l'immédiat CA vous pouvez définir une propriété avec un nom et d'y accéder à partir de votre session.
Dans Wix:
En CA:
Différés CA:
Afin de passer des arguments à la différés CA vous avez besoin d'utiliser le Propriété CustomActionData, cette propriété est le seul que vous pouvez accéder à partir d'un différé CA.
Dans le cas de WIX, la DTF comprend un CustomActionData classe qui est une clé/valeur dictionnaire, et vous pouvez y accéder à l'aide:
Dans Wix:
En CA:
Immédiate CA + CustomActionData:
Si vous souhaitez utiliser le CustomActionData pour votre CA, vous pouvez faire quelque chose comme ceci:
Dans Wix:
En CA:
Dans le cas de Arg4 puisqu'elle contient la valeur d'une propriété, vous aurez besoin d'y accéder comme ceci:
Malheureusement, cela fonctionne dans l'immédiat CA seulement, cela signifie que si vous voulez utiliser la valeur de cette propriété dans un différé CA vous aurez besoin d'avoir deux actions personnalisées:
CA 1 pour définir le CustomActionData pour le CA exécuté immédiatement. (Rappelez-vous le nom de la propriété du même nom défini pour votre CustomAction.
CA 2 CA avec la logique spécifique qui consomme CustomActionData.
Je vous suggérons d'utiliser le CustomActionData pour tous les cas, de cette façon est plus facile pour vous convertir CA Immédiat et Différé le code est plus facile à lire.
Références:
session.Format
CustomActionData
Je pense que cette réponse est absent de la <action personnalisée> qui définit la propriété, par exemple
<CustomAction Id="SetDirProp" Property="InstallDir" Value="[TARGETDIR]" />
OriginalL'auteur Rolo