Макросы в схеме манифеста пакетов

Макрос — это динамически вычисляемое значение манифеста. Макросы можно использовать в значениях некоторых атрибутов в схеме манифеста пакета. Примерами таких атрибутов являются uap11:CurrentDirectoryPath и uap11:Parameters.

Syntax

Макрос выражается в форме $(macro_name).

  • Этот синтаксис расширяется до значения в столбце "Развернуть" ниже .
  • Для одного $ символа в значении атрибута используйте escape-последовательность $$.
имя макроса; Разворачивается в
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()

Пример сценария

В этом гипотетическом примере я создал упакованную приложение (написанную в Python) с именем MyPackagedPythonApp.py. Чтобы запустить его, мне потребуется следующее в моем манифесте:

<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m MyPackagedPythonApp.py --default=1">

Эта конфигурация приводит к выполнению этой команды:

"C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\python.exe" -m MyPackagedPythonApp.py --default=1

Но эта команда завершается C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abcошибкой, если текущая папка не будет.

Поэтому я могу попытаться указать файл .py по абсолютному имени файла, как показано ниже:

"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

Но я, как разработчик, не знаю, будет ли пакет установлен на этот путь. Возможно, диск пользователя был полный, поэтому пакет закончился на диске Q. И путь изменяется каждый раз, когда я ударил версию пакета. Таким образом, это место, где макросы приходят к спасению.

Я указываю файл .py с помощью макроса для пути (который будет оцениваться во время выполнения) в расположение пакета, как показано ниже:

<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m $(package.effectivePath)\MyPackagedPythonApp.py --defcon=1">

Теперь, во время выполнения, команда выполняется так, как я ожидаю. Но Windows динамически заполняет правильный путь (опять же, во время выполнения), как показано ниже.

"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