Compartilhar via


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