Exécuter des scripts avec le Framework de prise en charge de package

Les scripts permettent aux professionnels de l’informatique de personnaliser dynamiquement une application dans l’environnement de l’utilisateur une fois qu’elle est empaquetée à l’aide de MSIX. Par exemple, vous pouvez utiliser des scripts pour configurer votre base de données, configurer un VPN, monter un lecteur partagé ou effectuer une vérification de licence dynamiquement. Les scripts offrent beaucoup de flexibilité. Ils peuvent modifier les clés de Registre ou effectuer des modifications de fichier en fonction de la configuration de l’ordinateur ou du serveur.

Vous pouvez utiliser le Package Support Framework (PSF) pour exécuter un script PowerShell avant l’exécution d’un exécutable d’application empaqueté et un script PowerShell après l’exécution de l’exécutable de l’application pour nettoyer. Chaque exécutable d’application défini dans le manifeste de l’application peut avoir ses propres scripts. Vous pouvez configurer le script pour qu’il s’exécute une seule fois sur le premier lancement de l’application et sans afficher la fenêtre PowerShell afin que les utilisateurs ne terminent pas prématurément le script par erreur. Il existe d’autres options pour configurer la façon dont les scripts peuvent s’exécuter, comme indiqué ci-dessous.

Prérequis

Pour permettre l’exécution de scripts, vous devez définir la stratégie d’exécution RemoteSignedPowerShell sur . Pour ce faire, exécutez cette commande :

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

La stratégie d’exécution doit être définie pour l’exécutable PowerShell 64 bits et l’exécutable PowerShell 32 bits. Veillez à ouvrir chaque version de PowerShell et à exécuter l’une des commandes indiquées ci-dessus.

Voici les emplacements de chaque exécutable.

  • Ordinateur 64 bits :
    • Exécutable 64 bits : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • Exécutable 32 bits : %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Ordinateur 32 bits :
    • Exécutable 32 bits : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Pour plus d’informations sur les stratégies d’exécution de PowerShell, consultez cet article.

🚩 Veillez également à inclure le fichier StartingScriptWrapper.ps1 dans votre package et à le placer dans le même dossier que votre exécutable. Vous pouvez copier ce fichier à partir du package NuGet PSF ou du dépôt Github PSF.

Activer les scripts

Pour spécifier les scripts qui s’exécuteront pour chaque exécutable d’application empaquetée, vous devez modifier le fichier config.json. Pour indiquer à PSF d’exécuter un script avant l’exécution de l’application empaquetée, ajoutez un élément de configuration appelé startScript. Pour indiquer à PSF d’exécuter un script une fois l’application empaquetée terminée, ajoutez un élément de configuration appelé endScript.

Éléments de configuration de script

Voici les éléments de configuration disponibles pour les scripts. Le script de fin ignore les éléments de configuration et stopOnScriptError les waitForScriptToFinish éléments de configuration.

Nom de clé Type de valeur Requis ? Default Description
scriptPath string Oui N/A Chemin d’accès au script, y compris le nom et l’extension. Le chemin d’accès est relatif au répertoire de travail de l’application s’il est spécifié, sinon, il démarre au répertoire racine du package.
scriptArguments string No empty Liste d’arguments délimitées par l’espace. Le format est le même pour un appel de script PowerShell. Cette chaîne est ajoutée pour scriptPath effectuer un appel PowerShell.exe valide.
runInVirtualEnvironment boolean Non true Spécifie si le script doit s’exécuter dans le même environnement virtuel que l’application empaquetée.
runOnce boolean Non true Spécifie si le script doit s’exécuter une seule fois par utilisateur, par version.
showWindow boolean Non false Spécifie si la fenêtre PowerShell est affichée.
stopOnScriptError boolean Non false Spécifie s’il faut quitter l’application si le script de démarrage échoue.
waitForScriptToFinish boolean Non true Spécifie si l’application empaquetée doit attendre que le script de démarrage se termine avant de commencer.
timeout DWORD No INFINITE Durée d’exécution du script. Une fois le temps écoulé, le script est arrêté.

Notes

La définition stopOnScriptError: true et waitForScriptToFinish: false pour l’exemple d’application n’est pas prise en charge. Si vous définissez ces deux éléments de configuration, PSF retourne l’erreur ERROR_BAD_CONFIGURATION.

Exemple de configuration

Voici un exemple de configuration utilisant deux exécutables d’application différents.

{
  "applications": [
    {
      "id": "Sample",
      "executable": "Sample.exe",
      "workingDirectory": "",
      "stopOnScriptError": false,
      "startScript":
      {
        "scriptPath": "RunMePlease.ps1",
        "scriptArguments": "\\\"First argument\\\" secondArgument",
        "runInVirtualEnvironment": true,
        "showWindow": true,
        "waitForScriptToFinish": false
      },
      "endScript":
      {
        "scriptPath": "RunMeAfter.ps1",
        "scriptArguments": "ThisIsMe.txt"
      }
    },
    {
      "id": "CPPSample",
      "executable": "CPPSample.exe",
      "workingDirectory": "",
      "startScript":
      {
        "scriptPath": "CPPStart.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runInVirtualEnvironment": true
      },
      "endScript":
      {
        "scriptPath": "CPPEnd.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runOnce": false
      }
    }
  ],
  "processes": [
    ...(taken out for brevity)
  ]
}