Comment les propriétés définies sur CustomActionData doivent-elles être récupérées par une action personnalisée différée?
Réponses
Trop de publicités?Reportés actions personnalisées ne pouvez pas accéder directement installateur de propriétés (de référence). En fait, seulement CustomActionData
de la propriété
session.CustomActionData
et d'autres méthodes et propriétés énumérées ici sont disponibles sur l'objet de session.
Par conséquent, pour un différé d'action personnalisée pour récupérer une propriété, par exemple l' INSTALLLOCATION
, vous devez utiliser un type de 51 action personnalisée - c'est à dire une propriété d'une action personnalisée, afin de leur transmettre cette information et vous pourrez utiliser les données du CustomAction du code C# par session.CustomActionData
. (voir référence & de référence)
Ci-dessous est un exemple d'un type 51 action personnalisée (CustomAction1
) qui permettra de définir une propriété qui peut être récupéré en CustomAction2
.
<CustomAction Id="CustomAction1"
Property="CustomAction2"
Value="SomeCustomActionDataKey=[INSTALLLOCATION]"
/>
Notez que Property
nom de l'attribut CustomAction2
. Ce qui est important. La Propriété valeur de l'attribut de la type 51 action doit être égal/identique au nom de l'action personnalisée qui consomme CustomActionData
. (voir référence)
Notez le nom de l' SomeCustomActionDataKey
dans la Value
attribut paire clé/valeur? Dans votre code C# dans la consommation de l'action personnalisée (CustomAction2
), vous aurez l'air qui a la propriété d' CustomActionData
en utilisant l'expression suivante:
string somedata = session.CustomActionData["SomeCustomActionDataKey"];
La clé que vous utilisez pour récupérer la valeur de CustomActionData
n'est PAS la valeur en Property
de l'attribut de type 51 action personnalisée, mais la clé de l' key=value
paire dans l' Value
d'attribut. (Important à emporter: CustomActionData
est remplie par la définition d'un programme d'installation de la propriété qui a le même nom que l'Id de la consommation de l'action personnalisée, mais CustomActionData
touches ne sont PAS installer propriétés.) (voir référence)
Dans notre scénario, la consommation de l'action personnalisée est un différé d'action personnalisée définie un peu comme ci-dessous:
<Binary Id="SomeIdForYourBinary" SourceFile="SomePathToYourDll" />
<CustomAction Id="CustomAction2"
BinaryKey="SomeIdForYourBinary"
DllEntry="YourCustomActionMethodName"
Execute="deferred"
Return="check"
HideTarget="no"
/>
La configuration de la InstallExecuteSequence
Bien sûr, la consommation d'action personnalisée (CustomAction2
) doit courir après le type 51 action personnalisée (CustomAction1
). Ainsi, vous aurez à planifier comme ceci:
<InstallExecuteSequence>
<!--Schedule the execution of the custom actions in the install sequence.-->
<Custom Action="CustomAction1" Before="CustomAction2" />
<Custom Action="CustomAction2" After="[SomeInstallerAction]" />
</InstallExecuteSequence>