Exécuter des scripts avec le Framework de prise en charge de packageRun scripts with the Package Support Framework

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.Scripts enable IT Pros to customize an application dynamically to the user's environment after it is packaged using 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.For example, you can use scripts to configure your database, set up a VPN, mount a shared drive, or perform a license check dynamically. Les scripts offrent beaucoup de flexibilité.Scripts provide a lot of flexibility. 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.They may change registry keys or perform file modifications based on the machine or server configuration.

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.You can use the Package Support Framework (PSF) to run one PowerShell script before a packaged application executable runs and one PowerShell script after the application executable runs to clean up. Chaque exécutable d’application défini dans le manifeste de l’application peut avoir ses propres scripts.Each application executable defined in the application manifest can have its own 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.You can configure the script to run once only on the first app launch and without showing the PowerShell window so users won't end the script prematurely by mistake. Il existe d’autres options pour configurer la façon dont les scripts peuvent s’exécuter, comme indiqué ci-dessous.There are other options to configure the way scripts can run, shown below.

PrérequisPrerequisites

Pour permettre l’exécution de scripts, vous devez définir la stratégie d’exécution de PowerShell sur RemoteSigned .To enable scripts to run, you need to set the PowerShell execution policy to RemoteSigned. Pour ce faire, exécutez la commande suivante :You can do this by running this command:

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.The execution policy needs to be set for both the 64-bit PowerShell executable and the 32-bit PowerShell executable. Veillez à ouvrir chaque version de PowerShell et exécutez l’une des commandes ci-dessus.Make sure to open each version of PowerShell and run one of the commands shown above.

Voici les emplacements de chaque exécutable.Here are the locations of each executable.

  • Ordinateur 64 bits :64-bit computer:
    • fichier exécutable 64 bits :% SystemRoot% \system32\WindowsPowerShell\v1.0\powershell.exe64-bit executable: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • fichier exécutable 32 bits :% SystemRoot% \SysWOW64\WindowsPowerShell\v1.0\powershell.exe32-bit executable: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Ordinateur 32 bits :32-bit computer:
    • fichier exécutable 32 bits :% SystemRoot% \system32\WindowsPowerShell\v1.0\powershell.exe32-bit executable: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Pour plus d’informations sur les stratégies d’exécution de PowerShell, consultez cet article.For more information about PowerShell execution policies, see this article.

Veillez à inclure également le fichier StartingScriptWrapper.ps1 dans votre package et placez-le dans le même dossier que votre fichier exécutable.Make sure to also include the StartingScriptWrapper.ps1 file in your package and place it in the same folder as your executable. Vous pouvez copier ce fichier à partir du package de fibres de polyesters NuGet.You can copy this file from the PSF NuGet package.

Activer les scriptsEnable 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.To specify what scripts will run for each packaged application executable, you need to modify the config.json file. 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 .To tell PSF to run a script before the execution of the packaged application, add a configuration item called 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 .To tell PSF to run a script after the packaged application finishes add a configuration item called endScript.

Éléments de configuration de scriptScript configuration items

Voici les éléments de configuration disponibles pour les scripts.The following are the configuration items available for the scripts. Le script de fin ignore waitForScriptToFinish les stopOnScriptError éléments de configuration et.The ending script ignores the waitForScriptToFinish and stopOnScriptError configuration items.

Nom de cléKey name Type de valeurValue type Requis ?Required? DefaultDefault DescriptionDescription
scriptPath stringstring OuiYes N/AN/A Chemin d’accès au script, y compris le nom et l’extension.The path to the script including the name and 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.The path is relative to the application's working directory if specified, otherwise, it starts at the root directory of the package.
scriptArguments stringstring NonNo emptyempty Liste d’arguments délimités par des espaces.Space delimited argument list. Le format est le même pour un appel de script PowerShell.The format is the same for a PowerShell script call. Cette chaîne est ajoutée à scriptPath pour effectuer un appel de PowerShell.exe valide.This string gets appended to scriptPath to make a valid PowerShell.exe call.
runInVirtualEnvironment booleanboolean NonNo truetrue 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.Specifies whether the script should run in the same virtual environment that the packaged application runs in.
runOnce booleanboolean NonNo truetrue Spécifie si le script doit s’exécuter une fois par utilisateur, par version.Specifies whether the script should run once per user, per version.
showWindow booleanboolean NonNo falsefalse Spécifie si la fenêtre PowerShell est affichée.Specifies whether the PowerShell window is shown.
stopOnScriptError booleanboolean NonNo falsefalse Spécifie s’il faut quitter l’application en cas d’échec du script de démarrage.Specifies whether to exit the application if the starting script fails.
waitForScriptToFinish booleanboolean NonNo truetrue Spécifie si l’application empaquetée doit attendre la fin du script de démarrage avant de démarrer.Specifies whether the packaged application should wait for the starting script to finish before starting.
timeout DWORDDWORD NonNo INFINITEINFINITE Durée pendant laquelle le script est autorisé à s’exécuter.How long the script will be allowed to execute. Lorsque le temps est écoulé, le script est arrêté.When the time elapses, the script will be stopped.

Notes

stopOnScriptError: trueLa définition waitForScriptToFinish: false de et de pour l’exemple d’application n’est pas prise en charge.Setting stopOnScriptError: true and waitForScriptToFinish: false for the sample application is not supported. Si vous définissez ces deux éléments de configuration, les fibres distantes renverront l’erreur ERROR_BAD_CONFIGURATION.If you set both of these configuration items, PSF will return the error ERROR_BAD_CONFIGURATION.

Exemple de configurationSample configuration

Voici un exemple de configuration utilisant deux exécutables d’application différents.Here is a sample configuration using two different application executables.

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