Freigeben über


Makros im Paketmanifestschema

Ein Makro ist ein dynamisch ausgewerteter manifester Wert. Sie können Makros in den Werten einiger Attribute im Paketmanifestschema verwenden. Beispiele für solche Attribute sind uap11:CurrentDirectoryPath und uap11:Parameters.

Syntax

Ein Makro wird im Format $(macro_name)ausgedrückt.

  • Diese Syntax wird auf den Wert in der Spalte Expands to (Erweitert) unten erweitert.
  • Verwenden Sie für ein einzelnes $ Zeichen in einem Attributwert die Escapesequenz $$.
Makroname Erweitert zu
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()

Beispielszenario

In diesem hypothetischen Beispielszenario habe ich eine gepackte App (in Python geschrieben) mit dem Namen MyPackagedPythonApp.pyerstellt. Zum Ausführen benötige ich Folgendes in meinem Manifest:

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

Diese Konfiguration bewirkt, dass dieser Befehl ausgeführt wird:

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

Dieser Befehl schlägt jedoch fehl, wenn der aktuelle Ordner nicht zufällig ist C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc.

Daher könnte ich versuchen, meine .py Datei wie folgt nach absolutem Dateinamen anzugeben:

"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

Aber ich als Entwickler weiß nicht, ob das Paket in diesem Pfad installiert wird . Möglicherweise war das Laufwerk des Benutzers voll, sodass das Paket auf Laufwerk Q gelandet ist. Und der Pfad ändert sich jedes Mal, wenn ich meine Paketversion stoße. Hier kommen Makros also zur Rettung.

Ich speziere meine .py Datei mithilfe eines Makros für den Pfad (der zur Laufzeit ausgewertet wird) zum Speicherort des Pakets, wie folgt:

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

Jetzt wird der Befehl zur Laufzeit erwartungsgemäß ausgeführt. Aber Windows hat dynamisch den richtigen Pfad (wieder zur Laufzeit) wie folgt ausgefüllt:

"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