--- title: Deploy and configure App-V apps using MDM description: Deploy and configure App-V apps using MDM MSHAttr: - 'PreferredSiteName:MSDN' - 'PreferredLib:/library/windows/hardware' ms.author: windows-hardware-design-content ms.date: 05/02/2017 ms.topic: article ms.prod: windows-hardware ms.technology: windows-oem --- # Deploy and configure App-V apps using MDM ## Executive summary

Microsoft Application Virtualization (App-V) apps have typically been configured, deployed, and managed through on-premise group policies using System Center Configuration Manager (SCCM) or App-V server. In Windows 10, version 1703, App-V apps can be configured, deployed, and managed using mobile device management (MDM), matching their on-premise counterparts.

MDM services can be used to publish App-V packages to clients running Windows 10, version 1703 (or later). All capabilities such as App-V enablement, configuration, and publishing can be completed using the EnterpriseAppVManagement CSP.

### EnterpriseAppVManagement CSP node structure [EnterpriseAppVManagement CSP reference](https://msdn.microsoft.com/en-us/windows/hardware/commercialize/customize/mdm/enterpriseappvmanagement-csp) ![enterpriseappvmanagement csp](images/provisioning-csp-enterpriseappvmanagement.png)

(./User/Vendor/MSFT/EnterpriseAppVManagement) contains the following sub-nodes.

AppVPublishing - An exec action node that contains the App-V publishing configuration for an MDM device (applied globally to all users for that device) or a specific MDM user.

- EnterpriseAppVManagement - AppVPackageManagement - **AppVPublishing** - LastSync - LastError - LastErrorDescription - SyncStatusDescription - SyncProgress - Sync - PublishXML - AppVDynamicPolicy

Sync command:

[App-V Sync protocol reference]( https://msdn.microsoft.com/enus/library/mt739986.aspx)

AppVDynamicPolicy - A read/write node that contains the App-V dynamic configuration for an MDM device (applied globally to all users for that device) or a specific MDM user.

- EnterpriseAppVManagement - AppVPackageManagement - AppVPublishing - **AppVDynamicPolicy** - [ConfigurationId] - Policy

Dynamic policy examples:

[Dynamic configuration processing](https://technet.microsoft.com/en-us/itpro/windows/manage/appv-application-publishing-and-client-interaction#bkmk-dynamic-config">Dynamic configuration processing)

AppVPackageManagement - Primarily read-only App-V package inventory data for MDM servers to query current packages.

- EnterpriseAppVManagement - **AppVPackageManagement** - [EnterpriseID] - [PackageFamilyName] - [PackageFullName] - Name - Version - Publisher - InstallLocation - InstallDate - Users - AppVPackageID - AppVVersionId - AppVPackageUri - AppVPublishing - AppVDynamicPolicy

The examples in the scenarios section demonstrate how the publishing document should be created to successfully publish packages, dynamic policies, and connection groups.

## Scenarios addressed in App-V MDM functionality

All App-V group policies will be reflected by having a corresponding CSP that can be set using the Policy CSP. The CSPs match all on-premise App-V configuration capabilities. In addition, new App-V package management capability has been added to closely match the App-V PowerShell functionality.

A complete list of App-V policies can be found here:

[ADMX-backed policy reference](https://msdn.microsoft.com/en-us/windows/hardware/commercialize/customize/mdm/policy-admx-backed) [EnterpriseAppVManagement CSP reference](https://msdn.microsoft.com/en-us/windows/hardware/commercialize/customize/mdm/enterpriseappvmanagement-csp) ### SyncML examples

The following SyncML examples address specific App-V client scenarios.

#### Enable App-V client

This example shows how to enable App-V on the device.

``` syntax $CmdID$ chr text/plain ./Device/Vendor/MSFT/Policy/Config/AppVirtualization/AllowAppvClient <enabled/> ``` #### Configure App-V client

This example shows how to allow package scripts to run during package operations (publish, run, and unpublish). Allowing package scripts assists in package deployments (add and publish of App-V apps).

``` syntax $CmdID$ chr text/plain ./Device/Vendor/MSFT/Policy/Config/AppVirtualization/AllowPackageScripts <enabled/> ```

Complete list of App-V policies can be found here:

[Policy CSP](https://msdn.microsoft.com/en-us/windows/hardware/commercialize/customize/mdm/policy-configuration-service-provider) #### SyncML with package published for a device (global to all users for that device)

This SyncML example shows how to publish a package globally on an MDM enrolled device for all device users.

``` syntax $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync node $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync/PublishXM L xml text/plain ```

*PackageUrl can be a UNC or HTTP/HTTPS endpoint.

#### SyncML with package (with dynamic configuration policy) published for a device (global to all users on that device)

This SyncML example shows how to publish a package globally, with a policy that adds two shortcuts for the package, on an MDM enrolled device.

``` syntax $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVDynamicPolicy/38/Policy xml text/plain [{ThisPCDesktopFolder}]\Skype_FromMDM.lnk [{ProgramFilesX86}]\Skype\Phone\Skype.exe [{Windows}]\Installer\{FC965A47-4839-40CA-B61818F486F042C6}\SkypeIcon.exe.0.ico [{ProgramFilesX86}]\Skype\ Skype.Desktop.Application Launch Skype 1 [{ProgramFilesX86}]\Skype\Phone\Skype.exe [{Common Desktop}]\Skype_FromMDMAlso.lnk [{ProgramFilesX86}]\Skype\Phone\Skype.exe [{Windows}]\Installer\{FC965A47-4839-40CA-B61818F486F042C6}\SkypeIcon.exe.0.ico [{ProgramFilesX86}]\Skype\ Skype.Desktop.Application Launch Skype 1 [{ProgramFilesX86}]\Skype\Phone\Skype.exe $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync node $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync/PublishXM L xml text/plain ```

*PackageUrl can be a UNC or HTTP/HTTPS endpoint.

#### SyncML with package (using user config deployment) published for a specific user

This SyncML example shows how to publish a package for a specific MDM user.

``` syntax $CmdID$ ./User/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync node $CmdID$ ./User/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync/PublishXML< /LocURI> xml text/plain ``` #### SyncML for publishing mixed-mode connection group containing global and user-published packages

This SyncML example shows how to publish a connection group, and group applications and plugins together.

> [!NOTE] > The user connection group has the user-only package as optional in this example, which implies users without the optional package can continue to launch the global package within the same connection group. ``` syntax $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync node $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync/PublishXM L xml text/plain $CmdID$ ./User/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync node $CmdID$ ./User/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync/PublishXML< /LocURI> xml text/plain ``` #### Unpublish example SyncML for all global packages

This SyncML example shows how to unpublish all global packages on the device by sending an empty package and connection group list in the SyncML.

``` syntax $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync node $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPublishing/Sync/PublishXML xml text/plain ``` #### Query packages on a device

These SyncML examples return all global, and user-published packages on the device.

``` syntax $CmdID$ ./Device/Vendor/MSFT/EnterpriseAppVManagement/AppVPackageManagement?list=StructData ``` ``` syntax $CmdID$ ./User/Vendor/MSFT/EnterpriseAppVManagement/AppVPackageManagement?list=StructData ```