Compartir a través de


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