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