Comment passer CustomActionData à un CustomAction en utilisant WiX?

Comment les propriétés définies sur CustomActionData doivent-elles être extraites par une action personnalisée différée?

Les actions personnalisées différées ne peuvent pas accéder directement aux propriétés du programme d’installation ( référence ). En fait, seule la propriété CustomActionData

 session.CustomActionData 

et d’autres méthodes et propriétés répertoriées ici sont disponibles sur l’object de session.

Par conséquent, pour qu’une action personnalisée différée récupère une propriété telle que INSTALLLOCATION , vous devez utiliser une action personnalisée de type 51, c’est-à-dire une action personnalisée set-property, pour transmettre ces informations et consumr les données du C # CustomAction. code à travers session.CustomActionData . (voir référence et référence )

Vous trouverez ci-dessous un exemple d’action personnalisée de type 51 ( CustomAction1 ) qui définira une propriété pouvant être extraite dans CustomAction2 .

  

Notez que le nom de l’atsortingbut Property est CustomAction2 . C’est important. La valeur de l’atsortingbut Property de l’action type 51 doit être identique / identique à celle de l’action personnalisée qui CustomActionData . (voir référence )

Notez le nom SomeCustomActionDataKey dans la paire clé / valeur d’atsortingbut Valeur? Dans votre code C # dans l’action personnalisée consommasortingce ( CustomAction2 ), vous rechercherez cette propriété à partir de CustomActionData en utilisant l’expression suivante:

 ssortingng somedata = session.CustomActionData["SomeCustomActionDataKey"]; 

La clé que vous utilisez pour extraire la valeur de CustomActionData N’EST PAS la valeur dans Property atsortingbut Property de l’action personnalisée de type 51, mais la clé de la paire key=value dans l’atsortingbut Value . ( CustomActionData important: CustomActionData est renseigné en définissant une propriété d’installation ayant le même nom que l’identifiant de l’action personnalisée consommasortingce, mais les clés CustomActionData ne sont PAS des propriétés du programme d’installation. ) (Voir référence )

Dans notre scénario, l’action personnalisée consommasortingce est une action personnalisée différée définie un peu comme ci-dessous:

   

Configuration de InstallExecuteSequence

Bien entendu, l’action personnalisée consommasortingce ( CustomAction2 ) doit être exécutée après l’action personnalisée de type 51 ( CustomAction1 ). Donc, vous devrez les planifier comme ceci:

      

Pour nous, les schlubs C ++, vous récupérez la propriété comme suit:

 MsiGetProperty(hInstall, "CustomActionData", buf, &buflen); 

Ensuite, vous parsingz ‘buf’. Merci à Bondbhai .

Si la valeur transmise à l’action personnalisée n’est pas un ensemble clé / paire …

c’est à dire

   

… alors le blob entier peut être récupéré en utilisant:

 ssortingng data = session["CustomActionData"];