Partager via


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__1234567890abcpas .

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