包清单架构中的宏
宏是动态计算的清单值。 可以在包清单架构中某些属性的值中使用宏。 此类属性的示例包括 uap11:CurrentDirectoryPath 和 uap11: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