Macros en el esquema del manifiesto del paquete
Una macro es un valor manifiesto evaluado dinámicamente. Puede usar macros en los valores de algunos atributos del esquema de manifiesto del paquete. Algunos ejemplos de estos atributos son uap11:CurrentDirectoryPath y uap11:Parameters.
Syntax
Una macro se expresa con el formato $(macro_name)
.
- Esa sintaxis se expande al valor de la columna Expands to (Expands to ) a continuación.
- Para un solo
$
carácter en un valor de atributo, use la secuencia$$
de escape .
Un nombre de macro | Se expande a |
---|---|
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() |
Escenario de ejemplo
En este escenario hipotético de ejemplo, he creado una aplicación empaquetada (escrita en Python) denominada MyPackagedPythonApp.py
. Para ejecutarlo, necesito lo siguiente en mi manifiesto:
<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m MyPackagedPythonApp.py --default=1">
Esa configuración hace que este comando se ejecute:
"C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\python.exe" -m MyPackagedPythonApp.py --default=1
Pero se produce un error en ese comando si la carpeta actual no es C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc
.
Por lo tanto, podría intentar especificar mi .py
archivo por nombre de archivo absoluto, como este:
"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
Pero, como desarrollador, no sé si el paquete se instalará en esa ruta de acceso. Quizás la unidad del usuario estaba llena, por lo que el paquete terminó en la unidad Q. Y la ruta de acceso cambia cada vez que se aumenta la versión del paquete. Así que aquí es donde las macros llegan al rescate.
Especificó mi .py
archivo mediante una macro para la ruta de acceso (que se evaluará en tiempo de ejecución) en la ubicación del paquete, de la siguiente manera:
<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m $(package.effectivePath)\MyPackagedPythonApp.py --defcon=1">
Ahora, en tiempo de ejecución, el comando se ejecuta como esperaba. Pero Windows ha rellenado dinámicamente la ruta de acceso correcta (de nuevo, en tiempo de ejecución), como esta:
"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