f3-logo-flexerasoftware

Comment récupérer la valeur de propriétés publiques dans un script VBS exécuter en mode « Commit » ou « Deferred Execution » ?Cette possibilité est très utile lorsque l’on veut exécuter un script VBS après un chainage de plusieurs MSI.

  • Pour rappel, l’exécution de chacun des MSI chainés est effectuée en Commit exécution.

Or, normalement, seules les variables d’environnement sont accessibles en mode exécution Commit.

La création de 2 Customs Actions est nécessaire à cette astuce.

1 – Créer une custom action de type « Set Property »

commitval1

commitval2

Explications :

Renseigner le champs « Property Name ». Cette valeur sera utilisée dans la deuxième Custom Action.

Renseigner le champ « Property Value » avec les Properties Public que l’on veut récupérer ultérieurement dans un script vbs.  Il est possible de récupérer la valeur de plusieurs « Properties public » en utilisant le séparateur “,”.

Dans l’exemple, on veut récupérer la valeur des propriétés publiques suivantes :

INSTALLDIR
ALLUSERS
PACKAGE_VERSION_MSI

Dans la séquence « Install Exec Sequence », la positionner après InstallInitialize .

Dans l’exemple, cette custom Action sera jouée à l’installation (Install Exec Condition = NOT Installed)

2 – Créer la custom action contenant le script VBS

Propriétés générales de la Custom Action

commitval3

Important : Le nom de la Custom Action doit être identique à la Propertie Name renseignée dans la Custom Action Précédente. Dans l’exemple : ****_I00_PUBLIC_PROPERTY

Cette Custom Action doit être exécutée avant InstallFinalise.

Contenu du script vbs de la Custom Action

commitval4

La variable Properties contient l’ensemble des valeurs des propriétés publiques spécifiées dans la première custom action (Set Property).

Dans l’exemple : [INSTALLDIR], [ALLUSERS], [PACKAGE_VERSION_MSI]

Ligne de code : ProArray = Split(Properties, », »)

On décide de créer un tableau et de récupérer le contenu de chacune des propriétés publiques séparées par une virgule dans le tableau.

Ligne de code : temp1 = ProArray(0)

On affecte la valeur contenue dans la première ligne du tableau ProArray.

Merci à Eric LE BORGNE pour cette astuce bien pratique.