L’objectif est de récupérer les variables d’environnement de l’utilisateur en cours d’installation d’un package MSI. La difficulté est que l’installation par certain outil de télédistribution installent les packages avec le compte système.
Ci-joint vous trouverez un script vbs permettant de récupérer ces informations. Nous allons décrire les actions suivantes :
- Ajout du vbscript dans une « custom action »
- Séquencer cette « custom action »
- Modifier l’installation d’un composant en fonction d’une variable utilisateur
- Séquencer cette « custom action »
- Utilisation de cette nouvelle valeur dans le chemin d’installation du composant
1. Créer une nouvelle « custom action » pour exécuter le vbscript
- Ouvrir le MSI avec InstEd
- Ajouter un nouvel enregistrement dans la table CustomAction, de type 38 (0x26 – VBScript – Source: Null – Target: script text | Scheduling: Always).
- Recopier le contenu du script ci-joint dans le champ Target.
Par exemple :
Voici les variables d’environnement récupérées et les variables « windows installer » affectées :
2. Séquencer la « custom action »
- Dans la table InstallExecuteSequence, ajouter un nouvel enregistrement. La séquencer juste après InstallInitialize.
Par exemple :
3. Créer une nouvelle « custom action » pour modifier les composants à partir des nouvelles informations
- Ajouter un nouvel enregistrement dans la table CustomAction, de type 35 (0x23 – Directory – Source: Directory to be set – Target: formatted text | Scheduling: Always).
Cette « custom action » va donc affecter au répertoire « LogonUserProfile » la variable windows installer « LogonUserProfile »
4. Séquencer la « custom action »
- Dans la table InstallExecuteSequence, ajouter un nouvel enregistrement.
- Positionné la “custom action” juste après la précédente et avant l’action ProcessComponents.
Pas de condition à ajouter, car elle doit être exécutée dans tous les cas, installation, rollback, désinstallation et auto-réparation.
Par exemple :
Par exemple, ici nous avons positionné un fichier dans le profil de l’utilisateur. Ce fichier est contenu dans un composant :
Le chemin d’installation du composant sera donc automatique réévalué à l’installation, rollback, désinstallation et auto-réparation.
Ce principe pourra également être utilisé pour des package MSI x86/x64 pour des composants nécessitant un chemin différent suivant l’architecture du poste de travail.
***************************************
Get_LogonUsersVars.vbs
Option Explicit
Const HKEY_USERS = &H80000003
Dim strKeyPath, subKey, arrKeys
Dim oReg 
Set oReg = GetObject(« winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv »)
Dim oShell 
Set oShell = CreateObject(« Wscript.Shell »)
strKeyPath = « Volatile Environment »
‘*** DEBUT DU MAIN ***
oReg.EnumKey HKEY_USERS, «  », arrKeys 
   
 For Each subkey In arrKeys     
     
     If RegExists(« HKEY_USERS\ » & subkey & « \ » & strKeyPath & « \ ») Then
Session.Property(« LogonUserSID ») = subkey
‘Msgbox « User’s SID : » & Session.Property(« LogonUserSID »)
Session.Property(« LogonUserName ») = oShell.RegRead(« HKEY_USERS\ » & subkey & « \ » & strKeyPath & « \USERNAME »)
‘Msgbox « LogonUserName : » & Session.Property(« LogonUserName »)
Session.Property(« LogonUserAppData ») = oShell.RegRead(« HKEY_USERS\ » & subkey & « \ » & strKeyPath & « \APPDATA »)
‘Msgbox « LogonUserAppData : » & Session.Property(« LogonUserAppData »)
Session.Property(« LogonUserProfile ») = oShell.RegRead(« HKEY_USERS\ » & subkey & « \ » & strKeyPath & « \USERPROFILE »)
‘Msgbox « LogonUserProfile : » & Session.Property(« LogonUserProfile »)
                 
     End If 
  
 Next     
‘*** FIN DU MAIN ***
‘ Test d’existence d’une clé de registre 
Function RegExists(value)
On Error Resume Next
    Dim Val 
            val = oShell.RegRead(value)
    If (Err.number = -2147024893) or (Err.number = -2147024894) Then 
        RegExists = False 
    Else 
        RegExists = True 
    End If
End Function







0 commentaires