包清单架构中的宏

宏是动态计算的清单值。 可以在包清单架构中某些属性的值中使用宏。 此类属性的示例包括 uap11:CurrentDirectoryPathuap11:Parameters

语法

宏以 的形式 $(macro_name)表示。

  • 该语法将扩展为下面的“ 扩展到 ”列中的值。
  • 对于属性值中的单个 $ 字符,请使用转义序列 $$
宏名称 扩展为
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 ()

示例方案

在此假设的示例方案中,我创建了一个打包的应用, (用 Python 编写的) 名为 MyPackagedPythonApp.py。 若要运行它,我需要在清单中提供以下内容:

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

该配置会导致此命令执行:

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

但如果当前文件夹不碰巧 C:\Program Files\WindowsApps\MyApp_1.2.3.4_x64__1234567890abc为 ,该命令将失败。

因此,我可能会尝试按绝对文件名指定我的 .py 文件,如下所示:

"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

但是,作为开发人员,我 不知道该包 是否会安装到该路径。 也许用户的驱动器已满,因此包最终位于驱动器 Q 上。每次我更新包版本时,路径都会更改。 因此,这就是宏来拯救的地方。

我使用路径 (的宏指定文件 .py ,该路径将在运行时) 到包的位置进行评估,如下所示:

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

现在,在运行时,命令将按预期执行。 但 Windows 在运行时) 再次动态填充正确的路径 (,如下所示:

"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