Bagikan melalui


Makro dalam skema manifes paket

Makro adalah nilai manifes yang dievaluasi secara dinamis. Anda dapat menggunakan makro dalam nilai beberapa atribut dalam skema manifes paket. Contoh atribut tersebut adalah uap11:CurrentDirectoryPath dan uap11:Parameters.

Sintaks

Makro dinyatakan dalam formulir $(macro_name).

  • Sintaks itu meluas ke nilai dalam kolom Perluas ke di bawah ini.
  • Untuk satu $ karakter dalam nilai atribut, gunakan urutan $$escape .
Nama makro Perluas ke
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()

Contoh skenario

Dalam skenario contoh hipotetis ini, saya telah membuat aplikasi kemasan (ditulis dalam Python) bernama MyPackagedPythonApp.py. Untuk menjalankannya, saya memerlukan hal berikut dalam manifes saya:

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

Konfigurasi tersebut menyebabkan perintah ini dijalankan:

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

Tetapi perintah itu gagal jika folder saat ini tidak terjadi adalah C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc.

Jadi saya mungkin mencoba menentukan file saya .py dengan nama file absolut, seperti ini:

"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

Tapi saya, sebagai pengembang, tidak tahu apakah paket akan diinstal ke jalur itu. Mungkin drive pengguna penuh, sehingga paket berakhir pada drive Q. Dan jalur berubah setiap kali saya menabrak versi paket saya. Jadi di sinilah makro datang untuk menyelamatkan.

Saya menentukan file saya .py dengan menggunakan makro untuk jalur (yang akan dievaluasi saat runtime) ke lokasi paket, seperti ini:

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

Sekarang, pada runtime, perintah dijalankan seperti yang saya harapkan. Tetapi Windows telah secara dinamis mengisi jalur yang tepat (sekali lagi, pada runtime), seperti ini:

"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