Macros no esquema de manifesto do pacote
Uma macro é um valor manifestado avaliado dinamicamente. Você pode usar macros nos valores de alguns atributos no esquema de manifesto do pacote. Exemplos desses atributos são uap11:CurrentDirectoryPath e uap11:Parameters.
Syntax
Uma macro é expressa no formato $(macro_name)
.
- Essa sintaxe se expande para o valor na coluna Expande para abaixo.
- Para um único
$
caractere em um valor de atributo, use a sequência$$
de escape .
Nome da macro | Expande para |
---|---|
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() |
Um cenário de exemplo
Neste cenário de exemplo hipotético, criei um aplicativo empacotado (escrito em Python) chamado MyPackagedPythonApp.py
. Para executá-lo, preciso do seguinte no meu manifesto:
<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m MyPackagedPythonApp.py --default=1">
Essa configuração faz com que esse comando seja executado:
"C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc\python.exe" -m MyPackagedPythonApp.py --default=1
Mas esse comando falhará se a pasta atual não for C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc
.
Portanto, posso tentar especificar meu .py
arquivo por nome de arquivo absoluto, desta forma:
"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
Mas eu, como desenvolvedor, não sei se o pacote será instalado nesse caminho. Talvez a unidade do usuário estivesse cheia, então o pacote acabou na unidade Q. E o caminho muda sempre que eu aumento a versão do pacote. Então é aqui que as macros vêm para o resgate.
Especifiquei meu .py
arquivo usando uma macro para o caminho (que será avaliado em runtime) para o local do pacote, desta forma:
<Application...Executable="python.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="packagedClassicApp" uap10:Parameters="-m $(package.effectivePath)\MyPackagedPythonApp.py --defcon=1">
Agora, em runtime, o comando é executado conforme o esperado. Mas o Windows preencheu dinamicamente o caminho certo (novamente, em runtime), desta forma:
"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