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 a été 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 dynamique. Les scripts offrent beaucoup de flexibilité. Ils peuvent modifier les clés de registre ou effectuer des modifications de fichiers en fonction de la configuration de l’ordinateur ou du serveur.

Vous pouvez utiliser l’infrastructure de support des packages pour exécuter un script PowerShell avant qu’un exécutable d’application empaquetée s’exécute et un script PowerShell après l’exécution de l’exécutable d’application pour le nettoyage. 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 lors du 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 de PowerShell sur RemoteSigned . Pour ce faire, exécutez la commande suivante :

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écutez l’une des commandes ci-dessus.

Voici les emplacements de chaque exécutable.

  • Ordinateur 64 bits :
    • fichier exécutable 64 bits :% SystemRoot% \system32\WindowsPowerShell\v1.0\powershell.exe
    • fichier exécutable 32 bits :% SystemRoot% \SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Ordinateur 32 bits :
    • fichier 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 à inclure également le fichier StartingScriptWrapper.ps1 dans votre package et placez-le dans le même dossier que votre fichier exécutable. vous pouvez copier ce fichier à partir du package de fibres discontinues NuGet ou à partir du référentiel Github de fibresdiscontinues.

Activer les scripts

Pour spécifier les scripts qui seront exécutés pour chaque exécutable d’application empaquetée, vous devez modifier la config.jssur le fichier. Pour indiquer aux fibres de polyesters d’exécuter un script avant l’exécution de l’application empaquetée, ajoutez un élément de configuration appelé startScript . Pour indiquer aux fibres de polyesters d’exécuter un script après la fin de l’application empaqueté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 waitForScriptToFinish les stopOnScriptError éléments de configuration et.

Nom de clé Type de valeur Requis ? Par défaut 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 à partir du répertoire racine du package.
scriptArguments string Non empty Liste d’arguments délimités par des espaces. Le format est le même pour un appel de script PowerShell. Cette chaîne est ajoutée à scriptPath pour effectuer un appel de PowerShell.exe valide.
runInVirtualEnvironment boolean 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 boolean Non true Spécifie si le script doit s’exécuter une 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 en cas d’échec du script de démarrage.
waitForScriptToFinish boolean Non true Spécifie si l’application empaquetée doit attendre la fin du script de démarrage avant de démarrer.
timeout DWORD Non INFINITE Durée pendant laquelle le script est autorisé à s’exécuter. Lorsque le temps est écoulé, le script est arrêté.

Notes

stopOnScriptError: trueLa définition waitForScriptToFinish: false de et de pour l’exemple d’application n’est pas prise en charge. Si vous définissez ces deux éléments de configuration, les fibres distantes renverront 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)
  ]
}