동적 종속성 API를 사용하여 런타임 시 MSIX 패키지 참조

두 가지 구현

대상 플랫폼 및 시나리오에 따라 선택할 수 있는 두 가지의 동적 종속성 API 구현이 있습니다.

  • Windows App SDK의 동적 종속성 API. Windows 앱 SDK는 동적 종속성 API를 구현하는 C 및 C++ 함수(msixdynamicdependency.h에 있음)와 WinRT(Windows 런타임) 유형(Microsoft.Windows.ApplicationModel.DynamicDependency 네임스페이스에 있음)을 제공합니다. Windows App SDK를 지원하는 모든 Windows 버전에서 이 API 구현을 사용할 수 있습니다.
  • Windows 11의 동적 종속성 API. Windows 11은 동적 종속성 API(appmodel.h)를 구현하는 C 및 C++ 함수도 제공합니다. 이 API 구현은 Windows 11 버전 22H2(10.0, 빌드 22621) 이상을 대상으로 하는 앱에서만 사용할 수 있습니다.

두 구현 간의 차이점도 참조하세요.

참고

해당 토픽에서 볼 수 있듯이 Windows 앱 SDK(C/C++) API는 Mdd 접두사가 추가된 Windows 11(C/C++) API와 이름이 같습니다. MddMicrosoft 동적 종속성을 나타냅니다.

그리고 프레임워크, 리소스, 선택적기본 패키지를 포함한 다양한 종류의 MSIX 패키지가 있습니다. 동적 종속성 API를 사용하면 패키징되지 않은 앱이 WinUI 2 및 DirectX 런타임과 같은 프레임워크 패키지를 참조하고 사용할 수 있습니다. 프레임워크 패키지 종속성에 대한 자세한 내용은 MSIX 프레임워크 패키지 및 동적 종속성을 참조하세요.

특히 동적 종속성 API는 MSIX 패키지에 대한 설치 시간 참조런타임 참조를 관리하는 방법을 제공합니다. 자세한 내용은 프레임워크 패키지 서비스 모델을 참조하세요.

동적 종속성 API 사용

패키징되지 않은 앱에서 동적 종속성 API를 사용하여 MSIX 패키지에 대한 종속성을 가져오려면 코드에서 다음과 같은 일반 패턴을 따릅니다.

1. 설치 시간 참조 만들기

앱의 설치 관리자에서 또는 앱을 처음 실행하는 동안 다음 함수 또는 메서드 중 하나를 호출하여 사용하려는 MSIX 패키지에 대한 조건 세트를 지정합니다. 이렇게 하면 앱에서 지정된 조건을 충족하는 MSIX 패키지에 종속되어 있음을 OS(운영 체제)에 알립니다. 조건을 충족하는 하나 이상의 MSIX 패키지가 설치된 경우 Windows는 설치 시간 참조가 삭제될 때까지 이러한 패키지 중 하나 이상이 설치된 상태로 유지되도록 합니다.

지정하는 기준에는 패키지 제품군 이름, 최소 버전 및 아키텍처가 포함되지만, 특정 MSIX 패키지를 표시할 수는 없습니다. 런타임 참조를 MSIX 패키지에 추가하면 API에서 지정된 조건을 충족하는 가장 높은 버전을 선택합니다.

또한 현재 프로세스, 파일 또는 앱을 계속 사용할 수 있음을 시스템에 나타내는 Windows 레지스트리 키일 수 있는 수명 아티팩트를 지정해야 합니다. 지정된 아티팩트가 더 이상 없으면 OS에서 종속성이 더 이상 필요하지 않다고 가정할 수 있으며, 다른 앱에서 MSIX 패키지에 대한 종속성을 선언하지 않은 경우 해당 패키지를 제거할 수 있습니다. 이 기능은 앱이 제거될 때 설치 시간 핀을 제거하지 않는 시나리오에 유용합니다.

이 API는 런타임 참조를 만들고 설치 시간 참조를 삭제하기 위해 다른 호출에서 사용해야 하는 종속성 ID를 반환합니다.

2. 런타임 참조 추가

앱에서 MSIX 패키지를 사용해야 하는 경우 다음 함수 또는 메서드 중 하나를 호출하여 지정된 MSIX 패키지에 대한 액세스를 요청하고 이에 대한 런타임 참조를 추가합니다. 이 API를 호출하면 MSIX 패키지가 현재 사용 중이며 버전 업데이트를 병렬로 처리하도록 OS에 알립니다(앱에서 이전 버전 사용을 완료할 때까지 해당 버전의 제거 또는 서비스를 효과적으로 지연). 성공하면 앱에서 클래스를 활성화하고 MSIX 패키지의 콘텐츠를 사용할 수 있습니다.

이 API를 호출하는 경우, 설치 시간 참조를 만들 때 반환된 종속성 ID와 프로세스의 패키지 그래프에서 MSIX 패키지에 사용할 원하는 순위를 전달해야 합니다. 이 API는 참조된 MSIX 패키지의 전체 이름과 활성 사용 종속성을 추적하는 데 사용되는 핸들을 반환합니다. 설치 시간 참조를 만들 때 지정한 조건을 충족하는 여러 MSIX 패키지가 설치된 경우 API에서 조건을 충족하는 가장 높은 버전을 선택합니다.

3. 런타임 참조 제거

MSIX 패키지를 사용하여 앱이 완료되면 다음 함수 또는 메서드 중 하나를 호출하여 런타임 참조를 제거합니다. 일반적으로 앱은 종료하는 동안 해당 API를 호출합니다. 이 API는 불필요한 버전의 MSIX 패키지를 제거해도 안전하다고 OS에 알립니다.

이 API를 호출하는 경우, 런타임 참조를 추가 시 반환된 핸들을 전달해야 합니다.

4. 설치 시간 참조 삭제

앱이 제거되면 다음 함수 또는 메서드 중 하나를 호출하여 설치 시간 참조를 삭제합니다. 이 API는 다른 앱에 종속성이 없는 경우 해당 MSIX 패키지를 제거해도 안전하다고 OS에 알립니다.

이 API를 호출하는 경우 설치 시간 참조를 만들 때 반환된 종속성 ID를 전달해야 합니다.

두 구현의 차이점

수명 관리자의 필요성(Windows App SDK 제한 사항)

Windows 앱 SDK의 동적 종속성 API를 사용하여 MSIX 패키지에 대한 종속성을 가져오는 경우, API에는 MSIX 패키지가 사용 중임을 Windows에 알리고 사용 중인 프레임워크 서비스를 차단하고자 설치한 다른 패키지 및 실행 중인 프로세스를 통한 도움을 사용합니다. 해당 구성 요소를 수명 관리자라고 합니다.

프레임워크 패키지의 경우 Windows 앱 SDK는 DDLM(동적 종속성 수명 관리자)이라는 관리자 구성 요소를 제공합니다. 그러나 다른 프레임워크 패키지는 현재 Microsoft의 유사한 수명 관리자 구성 요소를 제공하지 않습니다.

Windows 11의 동적 종속성 API에는 이러한 제한 사항이 없습니다.

기본 패키지 참조 및 사용(Windows App SDK 제한 사항)

동적 종속성은 항상 프레임워크 패키지를 대상으로 할 수 있습니다. 그러나 Windows 11의 동적 종속성 API만 기본 패키지도 참조하고 사용할 수 있습니다.

기본 패키지는 앱 패키지 매니페스트 원본 파일(Visual Studio의 Package.appxmanifest 파일)을 올바르게 구성해야 합니다. 특히 기본 패키지(호출자가 아닌 대상)는 <uap15:DependencyTarget>true</>를 설정해야 합니다(uap15:DependencyTarget 참조). 따라서 <uap15::DependencyTarget>의 목적은 기본 패키지를 대상으로 하는 동적 종속성을 사용하도록 설정하는 것입니다. 즉, 메인 패키지는 자신이 동적 종속성으로 사용될 수 있도록 설정해야 합니다(반면 프레임워크 패키지는 항상 암시적으로 이를 허용).

Windows App SDK 프레임워크 패키지 참조(Windows App SDK 제한 사항)

패키지되지 않은 앱에서는 Windows App SDK의 동적 종속성 API를 사용하여 Windows App SDK 프레임워크 패키지를 참조할 수 없습니다(이와 함께 다른 MSIX 패키지 참조 가능). 대신 Windows App SDK에서 제공하는 부트스트래퍼 API를 사용해야 합니다. 부트스트래퍼 API는 Windows 앱 SDK 프레임워크 패키지에 대한 종속성을 가져오도록 설계된 특수한 형태의 동적 종속성 API입니다. 자세한 내용은 외부 위치로 패키지되는 앱 또는 패키지되지 않은 앱에 Windows App SDK 런타임 사용을 참조하세요.

Windows 11의 동적 종속성 API에는 이러한 제한 사항이 없습니다.