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 licence case activée dynamiquement. Les scripts offrent une grande 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 sur propre. 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 le script prématurément 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 powerShell sur RemoteSigned. 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écutent 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 S/O 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 commence au répertoire racine du package.
scriptArguments string Non 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 booléen Non true Spécifie si le script doit s’exécuter dans le même environnement virtuel que celui dans lequel l’application empaquetée s’exécute.
runOnce booléen Non true Spécifie si le script doit s’exécuter une fois par utilisateur, par version.
showWindow booléen Non false Spécifie si la fenêtre PowerShell est affichée.
stopOnScriptError booléen Non false Spécifie s’il faut quitter l’application si le script de démarrage échoue.
waitForScriptToFinish booléen Non true Spécifie si l’application empaquetée doit attendre la fin du script de départ avant le démarrage.
timeout DWORD Non INFINITE Durée d’exécution du script. Lorsque le temps s’écoule, le script est arrêté.

Remarque

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)
  ]
}