Share via


패키지 매니페스트 스키마의 매크로

매크로는 동적으로 평가된 매니페스트 값입니다. 패키지 매니페스트 스키마의 일부 특성 값에 매크로를 사용할 수 있습니다. 이러한 특성의 예로 는 uap11:CurrentDirectoryPathuap11:Parameters가 있습니다.

Syntax

매크로는 형식 $(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()

예제 시나리오

이 가상의 예제 시나리오에서는 라는 MyPackagedPythonApp.py패키지된 앱(Python으로 작성됨)을 만들었습니다. 실행하려면 매니페스트에 다음이 필요합니다.

<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