엔터프라이즈 앱 관리
이 문서에서는 Windows MDM(모바일 장치 관리) 기능의 주요 기능 중 하나인 모든 Windows 디바이스에서 앱의 수명 주기를 관리하는 기능에 대해 설명합니다. 여기에는 MDM을 통해 기본적으로 관리할 수 있는 스토어 및 비 스토어 앱이 모두 포함됩니다.
관리자는 Windows MDM을 사용하여 앱 수명 주기를 관리함으로써 업데이트를 배포 및 관리하고, 오래되었거나 사용되지 않은 앱을 제거하고, 모든 디바이스에 organization 요구 사항을 충족하는 데 필요한 앱을 설치하도록 할 수 있습니다. 이 기능은 앱 관리 프로세스를 간소화하고 IT 전문가를 위한 시간과 노력을 절약합니다.
애플리케이션 관리 목표
Windows는 관리 서버에서 다음을 수행할 수 있는 기능을 제공합니다.
- 오프라인 스토어 앱 및 라이선스 배포
- LOB(기간 업무) 앱 배포(비 스토어 앱)
- 사용자의 모든 앱 인벤토리(스토어 및 비 스토어 앱)
- 디바이스의 모든 앱 인벤토리(스토어 및 비 스토어 앱)
- 사용자에 대한 모든 앱 제거(스토어 및 비 스토어 앱)
- Windows 데스크톱 버전(Home, Pro, Enterprise 및 Education)을 실행하는 디바이스의 모든 사용자에 대해 설치되도록 앱을 프로비전합니다.
- Windows 데스크톱 버전을 실행하는 디바이스에서 프로비전된 앱 제거
인벤토리 앱
Windows를 사용하면 사용자에게 배포된 모든 앱을 인벤토리하고 Windows 디바이스의 모든 사용자에 대한 모든 앱을 인벤토리할 수 있습니다. EnterpriseModernAppManagement CSP(구성 서비스 공급자) 인벤토리는 패키지된 앱을 포함하고 MSI 또는 실행 파일을 통해 설치된 기존 Win32 앱을 포함하지 않습니다. 앱이 인벤토리에 추가되면 다음 앱 분류에 따라 구분됩니다.
- 스토어: Microsoft Store에서 획득한 앱입니다.
- nonStore: Microsoft Store에서 가져오지 않은 앱입니다.
- 시스템: 운영 체제의 일부이며 제거할 수 없는 앱입니다. 이 분류는 읽기 전용이며 인벤토리에만 사용할 수 있습니다.
각 앱은 하나의 패키지 패밀리 이름과 하나 이상의 패키지 전체 이름으로 식별되며 앱은 원본에 따라 그룹화됩니다. EnterpriseModernAppManagement CSP는 이러한 분류를 노드로 표시합니다.
인벤토리는 AppManagement 노드에서 패키지 전체 이름을 통해 모든 수준에서 재귀적으로 실행할 수 있습니다. 특정 특성만 인벤토리하도록 선택할 수도 있습니다. 인벤토리는 패키지 전체 이름과 패키지 패밀리 이름에 해당하는 번들 및 리소스 팩을 나열합니다.
각 노드에 대한 자세한 내용은 EnterpriseModernAppManagement CSP에 제공된 자세한 설명을 참조하세요.
앱 인벤토리
EnterpriseModernAppManagement CSP를 사용하여 사용자 또는 디바이스에 대해 설치된 모든 앱을 쿼리할 수 있습니다. 쿼리는 MDM 또는 다른 메서드를 사용하여 설치된 경우에도 모든 앱을 반환합니다. 인벤토리는 사용자 또는 디바이스 수준에서 실행할 수 있습니다. 디바이스 수준의 인벤토리는 디바이스의 모든 사용자에 대한 정보를 반환합니다.
디바이스의 전체 인벤토리를 수행하는 것은 설치된 하드웨어 및 앱 수에 따라 리소스를 많이 사용할 수 있습니다. 반환된 데이터도 클 수 있습니다. 이러한 요청을 청크하여 클라이언트 및 네트워크 트래픽에 미치는 영향을 줄일 수 있습니다.
디바이스의 모든 앱에 대한 쿼리 예제입니다.
<!-- Get all apps under AppManagement --> <Get> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement?list=StructData</LocURI> </Target> </Item> </Get>
사용자에 대한 특정 앱에 대한 예제 쿼리입니다.
<!-- Get all information of a specific app for a user --> <Get> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}?list=StructData</LocURI> </Target> </Item> </Get>
스토어 라이선스 인벤토리
EnterpriseModernAppManagement CSP를 사용하여 사용자 또는 디바이스에 대해 설치된 모든 앱 라이선스를 쿼리할 수 있습니다. 쿼리는 MDM 또는 다른 메서드를 통해 설치된 경우 이벤트인 모든 앱 라이선스를 반환합니다. 인벤토리는 사용자 또는 디바이스 수준에서 실행할 수 있습니다. 디바이스 수준의 인벤토리는 디바이스의 모든 사용자에 대한 정보를 반환합니다.
각 노드에 대한 자세한 설명은 EnterpriseModernAppManagement CSP를 참조하세요.
참고
CSP의 LicenseID는 라이선스의 콘텐츠 ID입니다.
디바이스의 모든 앱 라이선스에 대한 쿼리의 예는 다음과 같습니다.
<!-- Get all app licenses for the device --> <Get> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses?list=StructData</LocURI> </Target> </Item> </Get>
다음은 사용자에 대한 모든 앱 라이선스에 대한 쿼리의 예입니다.
<!-- Get a specific app license for a user --> <Get> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses/{license id}?list=StructData</LocURI> </Target> </Item> </Get>
디바이스에서 비 스토어 앱을 설치하도록 설정
배포할 수 있는 두 가지 기본 유형의 앱이 있습니다.
- 앱을 저장합니다.
- 엔터프라이즈 서명된 앱.
엔터프라이즈 서명된 앱을 배포하려면 신뢰할 수 있는 앱을 허용하도록 디바이스에서 설정을 사용하도록 설정해야 합니다. 앱은 Microsoft 승인 루트(예: Symantec), 엔터프라이즈 배포 루트 또는 자체 서명된 앱에서 서명할 수 있습니다. 이 섹션에서는 비스토어 앱 배포를 위해 디바이스를 구성하는 단계를 설명합니다.
비 스토어 앱에 대한 디바이스 잠금 해제
Microsoft Store에 없는 앱을 배포하려면 ApplicationManagement/AllowAllTrustedApps 정책을 구성해야 합니다. 이 정책을 사용하면 디바이스에 인증서 체인이 있는 경우 디바이스에 비 스토어 앱을 설치할 수 있습니다. 앱은 디바이스의 루트 인증서(예: Symantec Enterprise), 엔터프라이즈 소유 루트 인증서 또는 디바이스에 배포된 피어 트러스트 인증서로 서명할 수 있습니다. 사용자 라이선스 배포에 대한 자세한 내용은 사용자에게 오프라인 라이선스 배포를 참조하세요.
AllowAllTrustedApps 정책을 사용하면 디바이스의 신뢰할 수 있는 사람 인증서 또는 디바이스의 신뢰할 수 있는 루트에 루트 인증서로 신뢰할 수 있는 앱을 설치할 수 있습니다. 정책은 기본적으로 구성되지 않으므로 Microsoft Store의 앱만 설치할 수 있습니다. 관리 서버가 암시적으로 값을 해제로 설정하면 디바이스의 설정 패널에서 설정이 비활성화됩니다.
예를 들면 다음과 같습니다.
<!-- Get policy (Default)-->
<Get>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Policy/Result/ApplicationManagement/AllowAllTrustedApps?list=StructData</LocURI>
</Target>
</Item>
</Get>
<!-- Update policy -->
<Replace>
<CmdID>2</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Policy/Config/ApplicationManagement/AllowAllTrustedApps</LocURI>
</Target>
<Meta>
<Format>int</Format>
<Type>text/plain</Type>
</Meta>
<Data>1</Data>
</Item>
</Replace>
개발자 모드용 디바이스 잠금 해제
Windows 디바이스에서 앱을 개발하려면 더 이상 특별한 라이선스가 필요하지 않습니다. 정책 CSP에서 ApplicationManagement/AllowDeveloperUnlock 정책을 사용하여 패키지되지 않은 앱의 디버깅 및 배포를 사용하도록 설정할 수 있습니다.
AllowDeveloperUnlock 정책은 디바이스에서 개발 모드를 사용하도록 설정합니다. AllowDeveloperUnlock은 기본적으로 구성되지 않으므로 Microsoft Store 앱만 설치할 수 있습니다. 관리 서버가 명시적으로 값을 해제로 설정하면 디바이스의 설정 패널에서 설정이 비활성화됩니다.
Windows 디바이스에 앱을 배포하려면 디바이스에 인증서 체인이 있어야 합니다. 앱은 디바이스의 루트 인증서(예: Symantec Enterprise), 엔터프라이즈 소유 루트 인증서 또는 디바이스에 배포된 피어 트러스트 인증서로 서명할 수 있습니다.
예를 들면 다음과 같습니다.
<!-- Get policy (Default)-->
<Get>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Policy/Result/ApplicationManagement/AllowDeveloperUnlock?list=StructData</LocURI>
</Target>
</Item>
</Get>
<!-- Update policy -->
<Replace>
<CmdID>2</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Policy/Config/ApplicationManagement/AllowDeveloperUnlock</LocURI>
</Target>
<Meta>
<Format>int</Format>
<Type>text/plain</Type>
</Meta>
<Data>1</Data>
</Item>
</Replace>
앱 설치
특정 사용자 또는 디바이스의 모든 사용자에게 앱을 설치할 수 있습니다. 앱은 Microsoft Store에서 직접 설치됩니다. 또는 로컬 디스크, UNC 경로 또는 HTTPS 위치와 같은 호스트 위치에서 설치됩니다. EnterpriseModernAppManagement CSP의 AppInstallation 노드를 사용하여 앱을 설치합니다.
스토어에서 사용자에게 앱 배포
Microsoft Store에서 사용자에게 직접 앱을 배포하기 위해 관리 서버는 EnterpriseModernAppManagement CSP의 AppInstallation 노드에서 추가 및 Exec 명령을 실행합니다. 이 기능은 사용자 컨텍스트에서만 지원되며 디바이스 컨텍스트에서는 지원되지 않습니다.
비즈니스용 스토어에서 앱을 구입했고 앱이 온라인 라이선스에 대해 지정된 경우 Microsoft Store에서 직접 앱과 라이선스를 획득해야 합니다.
참고
비즈니스용 Microsoft Store 및 교육용 Microsoft Store 사용 중지됩니다. 자세한 내용은 2023년 3월 31일 비즈니스용 Microsoft Store 및 교육 사용 중지를 참조하세요.
이 시나리오에 대한 요구 사항은 다음과 같습니다.
- 앱은 비즈니스용 스토어의 사용자 Microsoft Entra ID에 할당됩니다. 비즈니스용 스토어 또는 관리 서버를 통해 직접 할당할 수 있습니다.
- 디바이스에 Microsoft Store에 연결해야 합니다.
- 디바이스에서 Microsoft Store 서비스를 사용하도록 설정해야 합니다. 엔터프라이즈 관리자가 Microsoft Store의 UI를 사용하지 않도록 설정할 수 있습니다.
- 사용자는 Microsoft Entra ID로 로그인해야 합니다.
예를 들면 다음과 같습니다.
<Exec>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/StoreInstall</LocURI>
</Target>
<Meta>
<Format xmlns="syncml:metinf">xml</Format>
</Meta>
<Data>
<Application id="{ProductID}" flags="0" skuid=" " />
</Data>
</Item>
</Exec>
이전 릴리스의 변경 내용은 다음과 같습니다.
- 참조를
{CatID}
로{ProductID}
업데이트해야 합니다. 이 값은 비즈니스용 스토어 관리 도구의 일부로 획득됩니다. - 플래그 값은 0 또는 1일 수 있습니다.
- 0: 관리 도구는 비즈니스용 스토어 동기화로 다시 호출하여 사용자에게 애플리케이션의 좌석을 할당합니다.
- 1: 관리 도구는 사용자에게 애플리케이션의 좌석을 할당하기 위해 비즈니스용 스토어 동기화로 다시 호출하지 않습니다. CSP는 좌석을 사용할 수 있는 경우 좌석을 청구합니다.
- 는
skuid
필요한 새 매개 변수입니다. 이 값은 비즈니스용 스토어에서 관리 도구 동기화의 일부로 획득됩니다.
사용자에게 오프라인 라이선스 배포
비즈니스용 스토어에서 앱을 구매한 경우 앱 라이선스를 디바이스에 배포해야 합니다. 앱 라이선스는 앱 초기 설치의 일부로만 배포해야 합니다. 업데이트하는 동안 앱만 사용자에게 배포됩니다.
SyncML에서 명령에서 Exec
다음 정보를 지정해야 합니다.
- 라이선스 ID - 이 ID는 LocURI에 지정됩니다. 오프라인 라이선스의 라이선스 ID를 라이선스 파일의 "콘텐츠 ID"라고 합니다. 비즈니스용 스토어에서 Base 64로 인코딩된 라이선스 다운로드에서 이 정보를 검색할 수 있습니다.
- 라이선스 콘텐츠 - 이 콘텐츠는 데이터 섹션에 지정됩니다. 라이선스 콘텐츠는 라이선스의 Base 64로 인코딩된 Blob입니다.
오프라인 라이선스 설치의 예는 다음과 같습니다.
<Exec>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses/{LicenseID}/AddLicense</LocURI>
</Target>
<Meta>
<Format xmlns="syncml:metinf">xml</Format>
</Meta>
<Data><License Content="{LicenseBlob}"></Data>
</Item>
</Exec>
호스트된 위치에서 사용자에게 앱 배포
비즈니스용 스토어에서 앱을 구입했고 앱이 오프라인 라이선스에 대해 지정되었거나 앱이 스토어가 아닌 앱인 경우 호스트된 위치에서 앱을 배포해야 합니다.
이 시나리오에 대한 요구 사항은 다음과 같습니다.
- 앱의 위치는 로컬 파일 시스템(C:\StagedApps\app1.appx), UNC 경로(\\server\share\app1.apx) 또는 HTTPS 위치(
https://contoso.com/app1.appx
)일 수 있습니다. - 사용자에게 콘텐츠 위치에 액세스할 수 있는 권한이 있어야 합니다. HTTP의 경우 등록과 연결된 인증서를 사용하여 서버 인증 또는 인증서 인증을 사용할 수 있습니다. HTTP 위치는 지원되지만 인증 요구 사항이 부족하여 권장되지 않습니다.
- 디바이스는 Microsoft Store에 연결하거나, 서비스를 저장하거나, Microsoft Store UI를 사용하도록 설정할 필요가 없습니다.
- 사용자는 로그인해야 하지만 Microsoft Entra ID와의 연결은 필요하지 않습니다.
참고
비스토어 앱을 배포하려면 디바이스의 잠금을 해제하거나 오프라인 앱을 배포하기 전에 앱 라이선스를 배포해야 합니다. 자세한 내용은 사용자에게 오프라인 라이선스 배포를 참조하세요.
등록 취소 시 앱을 적절하게 제거하려면 패키지 패밀리 이름에 대한 추가 명령이 필요합니다.
다음은 기간 업무 앱 설치의 예입니다.
<!-- Add PackageFamilyName --> <Add> <CmdID>0</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}</LocURI> </Target> </Item> </Add> <!-- Install appx --> <Exec> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/HostedInstall</LocURI> </Target> <Meta> <Format xmlns="syncml:metinf">xml</Format> </Meta> <Data><Application PackageUri="\\server\share\HelloWorld10.appx" /></Data> </Item> </Exec>
다음은 종속성이 있는 앱 설치의 예입니다.
<!-- Add PackageFamilyName --> <Add> <CmdID>0</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName</LocURI> </Target> </Item> </Add> <!-- Install appx with deployment options and framework dependencies--> <Exec> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/HostedInstall</LocURI> </Target> <Meta> <Format xmlns="syncml:metinf">xml</Format> </Meta> <Data> <Application PackageUri="\\server\share\HelloWorld10.appx" DeploymentOptions="0" > <Dependencies> <Dependency PackageUri="\\server\share\HelloWorldFramework.appx" /> <Dependency PackageUri="\\server2\share\HelloMarsFramework.appx" /> </Dependencies> </Application> </Data> </Item> </Exec>
다음은 종속성 및 선택적 패키지가 있는 앱 설치의 예입니다.
<!-- Add PackageFamilyName --> <Add> <CmdID>0</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName</LocURI> </Target> </Item> </Add> <!-- Install appx with deployment options and framework dependencies--> <Exec> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/HostedInstall</LocURI> </Target> <Meta> <Format xmlns="syncml:metinf">xml</Format> </Meta> <Data> <Application PackageUri="\\server\share\HelloWorld10.appx" DeploymentOptions="0" > <Dependencies> <Dependency PackageUri="\\server\share\HelloWorldFramework.appx" /> <Dependency PackageUri="\\server2\share\HelloMarsFramework.appx" /> </Dependencies> <OptionalPackages> <Package PackageUri="\\server\share\OptionalPackage1.appx" PackageFamilyName="/{PackageFamilyName}" /> <Package PackageUri="\\server2\share\OptionalPackage2.appx" PackageFamilyName="/{PackageFamilyName}" /> </OptionalPackages> </Application> </Data> </Item> </Exec>
디바이스의 모든 사용자에 대한 앱 프로비전
프로비저닝을 사용하면 디바이스에 앱을 스테이징할 수 있으며 디바이스의 모든 사용자는 다음 로그인 시 앱을 등록할 수 있습니다. 이 기능은 비즈니스용 스토어에서 구매한 앱에 대해서만 지원되며, 앱은 오프라인 라이선스에 대해 지정되거나 앱은 비 스토어 앱입니다. 호스트된 위치에서 앱을 제공해야 합니다. 앱이 로컬 시스템으로 설치됩니다. 로컬 파일 공유에 설치하려면 디바이스의 '로컬 시스템'에 공유에 대한 액세스 권한이 있어야 합니다.
이 시나리오에 대한 요구 사항은 다음과 같습니다.
- 앱의 위치는 로컬 파일 시스템(C:\StagedApps\app1.appx), UNC 경로(\\server\share\app1.apx) 또는 HTTPS 위치(
https://contoso.com/app1.appx\
)일 수 있습니다. - 사용자에게 콘텐츠 위치에 액세스할 수 있는 권한이 있어야 합니다. HTTP의 경우 등록과 연결된 인증서를 사용하여 서버 인증 또는 인증서 인증을 사용할 수 있습니다. HTTP 위치는 지원되지만 인증 요구 사항이 부족하여 권장되지 않습니다.
- 디바이스는 Microsoft Store에 연결하거나 서비스를 사용하도록 설정할 필요가 없습니다.
- 디바이스에는 Microsoft Entra ID 또는 도메인 멤버 자격이 필요하지 않습니다.
- 비스토어 앱의 경우 디바이스의 잠금을 해제해야 합니다.
- 오프라인 앱 스토어의 경우 앱을 배포하기 전에 필요한 라이선스를 배포해야 합니다.
호스트된 위치에서 디바이스의 모든 사용자에 대한 앱을 프로비전하기 위해 관리 서버는 디바이스 컨텍스트의 AppInstallation 노드에서 추가 및 Exec 명령을 실행합니다. 등록 취소 시 앱을 적절하게 제거하려면 패키지 패밀리 이름에 대한 추가 명령이 필요합니다.
참고
프로비전된 앱을 제거하면 이미 앱을 설치한 사용자에서 제거되지 않습니다.
앱 설치의 예는 다음과 같습니다.
<!-- Add PackageFamilyName --> <Add> <CmdID>0</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName</LocURI> </Target> </Item> </Add> <!-- Provision appx to device --> <Exec> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/HostedInstall</LocURI> </Target> <Meta> <Format xmlns="syncml:metinf">xml</Format> </Meta> <Data><Application PackageUri="\\server\share\HelloWorld10.appx" /></Data> </Item> </Exec>
HostedInstall Exec 명령에는 포함된 XML이 필요한 데이터 노드가 포함되어 있습니다. 데이터 XML에 대한 요구 사항은 다음과 같습니다.
- 애플리케이션 노드에는 로컬 파일 위치, UNC 또는 HTTPS 위치일 수 있는 필수 매개 변수 PackageURI가 있습니다.
- 패키지와 함께 설치해야 하는 경우 종속성을 지정할 수 있습니다. 이것은 선택 사항입니다.
DeploymentOptions 매개 변수는 사용자 컨텍스트에서만 사용할 수 있습니다.
다음은 종속성이 있는 앱 설치의 예입니다.
<!-- Add PackageFamilyName --> <Add> <CmdID>0</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName</LocURI> </Target> </Item> </Add> <!-- Provision appx with framework dependencies--> <Exec> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/HostedInstall</LocURI> </Target> <Meta> <Format xmlns="syncml:metinf">xml</Format> </Meta> <Data> <Application PackageUri="\\server\share\HelloWorld10.appx" /> <Dependencies> <Dependency PackageUri="\\server\share\HelloWorldFramework.appx" /> <Dependency PackageUri="\\server2\share\HelloMarsFramework.appx"/> </Dependencies> </Application> </Data> </Item> </Exec>
앱 설치 상태 가져오기
앱 설치가 완료되면 Windows 알림이 전송됩니다. AppInstallation 노드를 사용하는 상태 쿼리할 수도 있습니다. 쿼리에서 다시 가져올 수 있는 정보 목록은 다음과 같습니다.
- 상태 - 앱 설치의 상태 나타냅니다.
- NOT_INSTALLED (0) - 노드가 추가되었지만 실행이 완료되지 않았습니다.
- 설치(1) - 실행이 시작되었지만 배포가 완료되지 않았습니다. 성공에 관계없이 배포가 완료되면 이 값이 업데이트됩니다.
- FAILED (2) - 설치에 실패했습니다. 오류의 세부 정보는 LastError 및 LastErrorDescription에서 찾을 수 있습니다.
- INSTALLED (3) - 설치에 성공하면 이 노드가 정리됩니다. 클린 작업이 완료되지 않은 경우 이 상태가 잠시 나타날 수 있습니다.
- LastError - 앱 배포 서버에서 보고한 마지막 오류입니다.
- LastErrorDescription - 앱 배포 서버에서 보고한 마지막 오류를 설명합니다.
- 상태 - 앱 설치 진행률을 나타내는 정수입니다. HTTPS 위치의 경우 이 상태 예상 다운로드 진행률을 보여 줍니다. 상태는 프로비저닝에 사용할 수 없으며 사용자 기반 설치에만 사용됩니다. 프로비저닝의 경우 값은 항상 0입니다.
앱이 성공적으로 설치되면 노드가 정리되고 더 이상 존재하지 않습니다. 앱의 상태 AppManagement 노드에서 보고할 수 있습니다.
다음은 특정 앱 설치에 대한 쿼리의 예입니다.
<!-- Get all app status under AppInstallation for a specific app--> <Get> <CmdID>2</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}?list=StructData</LocURI> </Target> </Item> </Get>
다음은 모든 앱 설치에 대한 쿼리의 예입니다.
<!-- Get all app status under AppInstallation--> <Get> <CmdID>2</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation?list=StructData</LocURI> </Target> </Item> </Get>
설치 완료에 대한 경고
애플리케이션 설치를 완료하는 데 다소 시간이 걸릴 수 있습니다. 따라서 비동기적으로 수행됩니다. Exec 명령이 완료되면 클라이언트는 실패 또는 성공 여부에 관계없이 상태 사용하여 관리 서버에 알림을 보냅니다.
다음은 경고의 예입니다.
<Alert>
<CmdID>4</CmdID>
<Data>1226</Data>
<Item>
<Source>
<LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}/HostedInstall</LocURI>
</Source>
<Meta>
<Type xmlns="syncml:metinf">Reversed-Domain-Name:com.microsoft.mdm.EnterpriseHostedAppInstall.result</Type>
<Format xmlns="syncml:metinf">int</Format>
</Meta>
<Data>0</Data>
</Item>
</Alert>
사용자 기반 설치의 ./User
경우 경로를 사용하고 앱을 프로비전하려면 경로를 사용합니다 ./Device
.
데이터 필드 값 0(0)은 성공을 나타냅니다. 그렇지 않으면 오류 코드입니다. 오류가 발생하면 AppInstallation 노드에서 자세한 내용을 확인할 수 있습니다.
참고
현재 스토어 앱 설치에 대한 경고를 사용할 수 없습니다.
앱 제거
Windows 디바이스에서 사용자의 앱을 제거할 수 있습니다. 앱을 제거하려면 CSP의 AppManagement 노드에서 앱을 삭제합니다. AppManagement 노드 내에서 패키지는 다음 노드에 따라 원본에 따라 구성됩니다.
- AppStore - 이러한 앱은 Microsoft Store용입니다. 스토어에서 직접 앱을 설치하거나 비즈니스용 스토어에서 엔터프라이즈로 배달할 수 있습니다.
- nonStore - Microsoft Store에서 획득하지 않은 앱입니다.
- 시스템 - 이러한 앱은 OS의 일부입니다. 이러한 앱은 제거할 수 없습니다.
앱을 제거하려면 원본 노드, 패키지 패밀리 이름 및 패키지 전체 이름 아래에서 앱을 삭제합니다. XAP를 제거하려면 패키지 패밀리 이름 및 패키지 전체 이름 대신 제품 ID를 사용합니다.
다음은 사용자에 대한 앱의 모든 버전을 제거하는 예제입니다.
<!-- Uninstall App for a Package Family-->
<Delete>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}</LocURI>
</Target>
</Item>
</Delete>
-다음은 사용자에 대한 특정 버전의 앱을 제거하는 예제입니다.
<!-- Uninstall App for a specific package full name-->
<Delete>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}/{PackageFullName}</LocURI>
</Target>
</Item>
</Delete>
디바이스에서 프로비전된 앱 제거
특정 버전 또는 패키지 패밀리의 모든 버전에 대해 디바이스에서 프로비전된 앱을 제거할 수 있습니다. 프로비전된 앱이 제거되면 디바이스에 대한 이후 사용자가 사용할 수 없습니다. 앱이 등록된 로그인한 사용자는 앱에 계속 액세스할 수 있습니다. 해당 사용자의 앱을 제거하려면 해당 사용자에 대한 앱을 명시적으로 제거해야 합니다.
참고
인벤토리 값이 IsProvisioned = 1인 앱만 제거할 수 있습니다.
프로비전된 앱 제거는 디바이스 컨텍스트에서 발생합니다.
디바이스에서 프로비전된 앱을 제거하는 예제는 다음과 같습니다.
<!- Remove Provisioned App for a Package Family--> <Delete> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}</LocURI> </Target> </Item> </Delete>
디바이스에서 프로비전된 앱의 특정 버전을 제거하는 예제는 다음과 같습니다.
<!-- Remove Provisioned App for a specific package full name--> <Delete> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}/{PackageFullName}</LocURI> </Target> </Item> </Delete>
스토어 앱 라이선스 제거
콘텐츠 ID에 따라 앱당 디바이스에서 앱 라이선스를 제거할 수 있습니다.
다음은 사용자에 대한 앱 라이선스를 제거하는 예제입니다.
<!-- Remove App License for a User--> <Delete> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses/{license id}</LocURI> </Target> </Item> </Delete>
다음은 프로비전된 패키지(디바이스 컨텍스트)에 대한 앱 라이선스를 제거하는 예제입니다.
<!-- Remove App License for a provisioned package (device) --> <Delete> <CmdID>1</CmdID> <Item> <Target> <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses/{license id}</LocURI> </Target> </Item> </Delete>
앱 제거에 대한 경고
앱을 제거하는 데 다소 시간이 걸릴 수 있습니다. 따라서 제거는 비동기적으로 실행됩니다. Exec 명령이 완료되면 클라이언트는 실패 또는 성공 여부에 관계없이 상태 사용하여 관리 서버에 알림을 보냅니다.
사용자 기반 제거의 경우 LocURI에서 ./User를 사용하고 프로비저닝의 경우 LocURI에서 ./Device를 사용합니다.
예를 들면 다음과 같습니다. 호스트된 앱 및 스토어 앱에는 단 하나의 제거만 있습니다.
<Alert>
<Data>1226</Data>
<Item>
<Source>
<LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/{PackageFamilyName}</LocURI>
</Source>
<Meta>
<Type xmlns="syncml:metinf">Reversed-Domain-Name:com.microsoft.mdm.EnterpriseAppUninstall.result</Type>
<Format xmlns="syncml:metinf">int</Format>
</Meta>
<Data>0</Data>
</Item>
</Alert>
앱 업데이트
디바이스에 설치된 앱은 관리 서버를 사용하여 업데이트할 수 있습니다. 앱은 스토어에서 직접 업데이트하거나 호스트된 위치에서 설치할 수 있습니다.
스토어에서 직접 앱 업데이트
Microsoft Store에서 앱을 업데이트하려면 디바이스에 스토어 서비스와의 연결이 필요합니다.
다음은 업데이트 검사의 예입니다.
<!- Initiate a update scan for a user--> <Exec> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/UpdateScan</LocURI> </Target> </Item> </Exec>
다음은 상태 검사 예입니다.
<!- Get last error related to the update scan--> <Get> <CmdID>1</CmdID> <Item> <Target> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/LastScanError</LocURI> </Target> </Item> </Get>
호스트된 위치에서 앱 업데이트
기존 앱을 업데이트하는 것은 초기 설치와 동일한 프로세스를 따릅니다. 자세한 내용은 호스트된 위치에서 사용자에게 앱 배포를 참조하세요.
프로비전된 앱 업데이트
앱 업데이트가 사용자에게 전송되면 프로비전된 앱이 자동으로 업데이트됩니다. 초기 프로비저닝과 동일한 프로세스를 사용하여 프로비전된 앱을 업데이트할 수도 있습니다. 초기 프로비저닝에 대한 자세한 내용은 디바이스의 모든 사용자에 대한 앱 프로비전을 참조하세요.
앱의 자동 업데이트 방지
특정 앱이 자동으로 업데이트되지 않도록 방지할 수 있습니다. 이 기능을 사용하면 IT 관리자가 정의한 대로 특정 앱이 제외된 앱에 대한 자동 업데이트를 켤 수 있습니다.
업데이트를 해제하는 것은 디바이스 수준에서 Microsoft Store의 업데이트에만 적용됩니다. 이 기능은 사용자 수준에서 사용할 수 없습니다. 오프라인 패키지가 호스트된 설치 위치에서 푸시되는 경우에도 앱을 업데이트할 수 있습니다.
예를 들면 다음과 같습니다.
<!- Prevent app from being automatically updated-->
<Replace>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}/DoNotUpdate</LocURI>
</Target>
<Meta>
<Format xmlns="syncml:metinf">int</Format>
<Type xmlns="syncml:metinf">text/plain</Type>
</Meta>
<Data>1</Data></Item>
</Replace>
더 많은 앱 관리 시나리오
다음 하위 섹션에서는 추가 설정 구성에 대한 정보를 제공합니다.
공유 사용자 앱 데이터 사용
유니버설 Windows 앱은 디바이스 사용자 간에 애플리케이션 데이터를 공유할 수 있습니다. 데이터 공유 기능은 패키지 패밀리 수준 또는 디바이스별로 설정할 수 있습니다.
참고
이는 다중 사용자 디바이스에만 적용됩니다.
ApplicationManagement/AllowSharedUserAppData 정책은 여러 사용자가 있을 때 앱 패키지가 앱 패키지 간에 데이터를 공유하도록 설정하거나 사용하지 않도록 설정합니다. 이 정책을 사용하도록 설정하면 애플리케이션은 패키지 패밀리의 패키지 간에 데이터를 공유할 수 있습니다. 해당 패키지 패밀리 및 로컬 컴퓨터에 대한 ShareLocal 폴더를 통해 데이터를 공유할 수 있습니다. 이 폴더는 Windows.Storage API를 통해 사용할 수 있습니다.
이 정책을 사용하지 않도록 설정하면 애플리케이션에서 여러 사용자 간에 사용자 애플리케이션 데이터를 공유할 수 없습니다. 그러나 미리 작성된 공유 데이터는 유지됩니다. 미리 작성된 공유 데이터를 클린 DISM(/Get-ProvisionedAppxPackage
을 사용하여 공유 데이터가 있는지 감지하고 /Remove-SharedAppxData
제거)합니다.
유효한 값은 0(끄기, 기본값) 및 1(켜기)입니다.
예를 들면 다음과 같습니다.
<!-- Get policy (Default)-->
<Get>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Policy/Result/ApplicationManagement/AllowSharedUserAppData?list=StructData</LocURI>
</Target>
</Item>
</Get>
<!-- Update policy -->
<Replace>
<CmdID>2</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Policy/Config/ApplicationManagement/AllowSharedUserAppData</LocURI>
</Target>
<Meta>
<Format>int</Format>
<Type>text/plain</Type>
</Meta>
<Data>1</Data>
</Item>
</Replace>