Macros dans le schéma du manifeste de package
Une macro est une valeur manifestée évaluée dynamiquement. Vous pouvez utiliser des macros dans les valeurs de certains attributs dans le schéma du manifeste de package. Uap11 :CurrentDirectoryPath et uap11 :Parameters sont des exemples de ces attributs.
Syntax
Une macro est exprimée sous la forme $(macro_name)
.
- Cette syntaxe est étendue à la valeur de la colonne Développe à ci-dessous.
- Pour un caractère unique
$
dans une valeur d’attribut, utilisez la séquence$$
d’échappement .
Nom de macro | Développe jusqu’à |
---|---|
env :environmentvariable | GetEnvironmentVariable(environmentvariable) |
package.currentDirectoryPath | GetCurrentDirectory() |
package.effectiveExternalPath | GetPackagePathByFullName2(... PackagePathType_EffectiveExternal...) |
package.effectivePath | GetPackagePathByFullName2(... PackagePathType_Effective...) |
package.installedPath | GetPackagePathByFullName2(... PackagePathType_Install...) |
package.machineExternalPath | GetPackagePathByFullName2(... PackagePathType_MachineExternal...) |
package.mutablePath | GetPackagePathByFullName2(... PackagePathType_Mutable...) |
package.userExternalPath | GetPackagePathByFullName2(... PackagePathType_UserExternal...) |
system.path | GetSystemDirectory() |
windows.path | GetWindowsDirectory() |
Exemple de scénario
Dans cet exemple de scénario hypothétique, j’ai créé une application empaquetée (écrite en Python) nommée MyPackagedPythonApp.py
. Pour l’exécuter, j’ai besoin des éléments suivants dans mon manifeste :
<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m MyPackagedPythonApp.py --default=1">
Cette configuration entraîne l’exécution de cette commande :
"C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\python.exe" -m MyPackagedPythonApp.py --default=1
Mais cette commande échoue si le dossier actif n’est C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc
pas .
Par conséquent, je pourrais essayer de spécifier mon .py
fichier par nom de fichier absolu, comme suit :
"C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\python.exe" -m "C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\MyPackagedPythonApp.py" --default=1
Mais en tant que développeur, je ne sais pas si le package sera installé sur ce chemin. Peut-être que le lecteur de l’utilisateur était plein, donc le package s’est retrouvé sur le lecteur Q. Et le chemin change chaque fois que je bouscule ma version de package. C’est là que les macros viennent à la rescousse.
Je spécifie mon .py
fichier à l’aide d’une macro pour le chemin d’accès (qui sera évalué au moment de l’exécution) à l’emplacement du package, comme suit :
<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m $(package.effectivePath)\MyPackagedPythonApp.py --defcon=1">
À présent, au moment de l’exécution, la commande est exécutée comme prévu. Mais Windows a rempli dynamiquement le chemin d’accès approprié (encore une fois, au moment de l’exécution), comme suit :
"C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\python.exe" -m "C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\MyPackagedPythonApp.py" --default=1