Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Макрос — это динамически вычисляемое значение манифеста. Макросы можно использовать в значениях некоторых атрибутов в схеме манифеста пакета. Примерами таких атрибутов являются 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