Condividi tramite


Macro nello schema del manifesto del pacchetto

Una macro è un valore manifesto valutato in modo dinamico. È possibile utilizzare macro nei valori di alcuni attributi nello schema del manifesto del pacchetto. Esempi di questi attributi sono uap11:CurrentDirectoryPath e uap11:Parameters.

Sintassi

Una macro viene espressa nel formato $(macro_name).

  • Tale sintassi si espande fino al valore nella colonna Espandi fino alla colonna seguente.
  • Per un singolo $ carattere in un valore di attributo, usare la sequenza di $$escape .
Nome macro Si espande in
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()

Scenario di esempio

In questo scenario di esempio ipotetico è stata creata un'app in pacchetto (scritta in Python) denominata MyPackagedPythonApp.py. Per eseguirlo, è necessario quanto segue nel manifesto:

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

Questa configurazione determina l'esecuzione di questo comando:

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

Ma questo comando ha esito negativo se la cartella corrente non è C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc.

È quindi possibile provare a specificare il .py file in base al nome file assoluto, come segue:

"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

Ma io, come sviluppatore, non so se il pacchetto verrà installato in quel percorso. Forse l'unità dell'utente era piena, quindi il pacchetto è finito sull'unità Q. E il percorso cambia ogni volta che si urta la versione del pacchetto. Ecco dove le macro arrivano al salvataggio.

Specificare il .py file usando una macro per il percorso (che verrà valutato in fase di esecuzione) nel percorso del pacchetto, come illustrato di seguito:

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

A questo punto, in fase di esecuzione, il comando viene eseguito come previsto. Ma Windows ha compilato dinamicamente il percorso corretto (di nuovo, in fase di esecuzione), come illustrato di seguito:

"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