다음을 통해 공유


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

두 구현

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

  • Windows 앱 SDK의 동적 종속성 API입니다. Windows 앱 SDK는 동적 종속성 API를 구현하는 C 및 C++ 함수( msixdynamicdependency.h) 및 WinRT(Windows 런타임) 형식( Microsoft.Windows.ApplicationModel.DynamicDependency 네임스페이스)을 제공합니다. Windows 앱 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 앱 SDK 제한 사항)

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

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

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

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

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

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

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

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

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