EnterpriseDesktopAppManagement CSP

The EnterpriseDesktopAppManagement configuration service provider is used to handle enterprise desktop application management tasks, such as querying installed enterprise applications, installing applications, or removing applications.

Application installations can take some time to complete, hence they're done asynchronously. When the Exec command is completed, the client can send a generic alert to the management server with a status, whether it's a failure or success. For a SyncML example, see Alert example.

The following list shows the EnterpriseDesktopAppManagement configuration service provider nodes:

Device/MSI

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI

Product Type is MSI.

Description framework properties:

Property name Property value
Format node
Access Type Get

Device/MSI/{ProductID}

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}

The MSI product code for the application.

Description framework properties:

Property name Property value
Format node
Access Type Add, Delete, Get
Atomic Required True
Dynamic Node Naming UniqueName: The MSI product code for the application.

Device/MSI/{ProductID}/DownloadInstall

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/DownloadInstall

Executes the download and installation of the application. In Windows 10, version 1703 service release, a new tag <DownloadFromAad> was added to the <Enforcement> section of the XML. The default value is 0 (don't send token). This tag is optional and needs to be set to 1 in case the server wants the download URL to get the AADUserToken.

Here's an example:

<Enforcement>
  <CommandLine>/quiet</CommandLine>
  <TimeOut>5</TimeOut>
  <RetryCount>3</RetryCount>
  <RetryInterval>5</RetryInterval>
  <DownloadFromAad>1</DownloadFromAad>
</Enforcement>

For more information, see DownloadInstall XSD Schema.

Description framework properties:

Property name Property value
Format xml
Access Type Add, Delete, Exec, Get

Device/MSI/{ProductID}/InstallDate

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/InstallDate

Installation date of the application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

Device/MSI/{ProductID}/InstallPath

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/InstallPath

Installation path of the application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

Device/MSI/{ProductID}/LastError

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/LastError

The last error code during the application installation process. This is typically stored as an HRESULT format. Depending on what was occurring when the error happened, this could be the result of executing MSIExec.exe or the error result from an API that failed.

Description framework properties:

Property name Property value
Format int
Access Type Get

Device/MSI/{ProductID}/LastErrorDesc

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/LastErrorDesc

Contains the last error code description. The LastErrorDesc value is looked up for the matching LastError value. Sometimes there is no LastErrorDesc returned.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

Device/MSI/{ProductID}/Name

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Name

Name of the application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

Device/MSI/{ProductID}/Publisher

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Publisher

Publisher of application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

Device/MSI/{ProductID}/Status

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Status

Status of the application. Valid values: 10-Initialized, 20-Download In Progress, 25-Pending Download Retry, 30-Download Failed, 40-Download Completed, 48-Pending User Session, 50-Enforcement In Progress, 55-Pending Enforcement Retry, 60-Enforcement Failed, 70-Enforcement Completed.

Description framework properties:

Property name Property value
Format int
Access Type Get

Device/MSI/{ProductID}/Version

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Version

MSI Product Version.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

Device/MSI/UpgradeCode

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1607 [10.0.14393] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/UpgradeCode

Description framework properties:

Property name Property value
Format node
Access Type Get
Case Sensitive True

Device/MSI/UpgradeCode/{Guid}

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1607 [10.0.14393] and later
./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/UpgradeCode/{Guid}

A gateway (or device management server) uses this method to detect matching upgrade MSI product when a Admin wants to update an existing MSI app. If the same upgrade product is installed, then the update is allowed.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get
Dynamic Node Naming ClientInventory

User/MSI

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI

Product Type is MSI.

Description framework properties:

Property name Property value
Format node
Access Type Get

User/MSI/{ProductID}

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}

The MSI product code for the application.

Description framework properties:

Property name Property value
Format node
Access Type Add, Delete, Get
Atomic Required True
Dynamic Node Naming UniqueName: The MSI product code for the application.

User/MSI/{ProductID}/DownloadInstall

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/DownloadInstall

Executes the download and installation of the application. In Windows 10, version 1703 service release, a new tag <DownloadFromAad> was added to the <Enforcement> section of the XML. The default value is 0 (don't send token). This tag is optional and needs to be set to 1 in case the server wants the download URL to get the AADUserToken.

Here's an example:

<Enforcement>
  <CommandLine>/quiet</CommandLine>
  <TimeOut>5</TimeOut>
  <RetryCount>3</RetryCount>
  <RetryInterval>5</RetryInterval>
  <DownloadFromAad>1</DownloadFromAad>
</Enforcement>

For more information, see DownloadInstall XSD Schema.

Description framework properties:

Property name Property value
Format xml
Access Type Add, Delete, Exec, Get

User/MSI/{ProductID}/InstallDate

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/InstallDate

Installation date of the application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

User/MSI/{ProductID}/InstallPath

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/InstallPath

Installation path of the application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

User/MSI/{ProductID}/LastError

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/LastError

The last error code during the application installation process. This is typically stored as an HRESULT format. Depending on what was occurring when the error happened, this could be the result of executing MSIExec.exe or the error result from an API that failed.

Description framework properties:

Property name Property value
Format int
Access Type Get

User/MSI/{ProductID}/LastErrorDesc

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/LastErrorDesc

Contains the last error code description. The LastErrorDesc value is looked up for the matching LastError value. Sometimes there is no LastErrorDesc returned.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

User/MSI/{ProductID}/Name

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Name

Name of the application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

User/MSI/{ProductID}/Publisher

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Publisher

Publisher of application.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

User/MSI/{ProductID}/Status

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Status

Status of the application. Valid values: 10-Initialized, 20-Download In Progress, 25-Pending Download Retry, 30-Download Failed, 40-Download Completed, 48-Pending User Session, 50-Enforcement In Progress, 55-Pending Enforcement Retry, 60-Enforcement Failed, 70-Enforcement Completed.

Description framework properties:

Property name Property value
Format int
Access Type Get

User/MSI/{ProductID}/Version

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1511 [10.0.10586] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{ProductID}/Version

MSI Product Version.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get

User/MSI/UpgradeCode

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1607 [10.0.14393] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/UpgradeCode

Description framework properties:

Property name Property value
Format node
Access Type Get
Case Sensitive True

User/MSI/UpgradeCode/{Guid}

Scope Editions Applicable OS
✅ Device
✅ User
✅ Pro
✅ Enterprise
✅ Education
✅ Windows SE
✅ IoT Enterprise / IoT Enterprise LTSC
✅ Windows 10, version 1607 [10.0.14393] and later
./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/UpgradeCode/{Guid}

A gateway (or device management server) uses this method to detect matching upgrade MSI product when a Admin wants to update an existing MSI app. If the same upgrade product is installed, then the update is allowed.

Description framework properties:

Property name Property value
Format chr (string)
Access Type Get
Dynamic Node Naming ClientInventory

DownloadInstall XSD Schema

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Data">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="MsiInstallJob">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Product">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Download">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="ContentURLList">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" name="ContentURL" type="xs:string" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Validation">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="FileHash" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Enforcement">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="CommandLine" type="xs:string" />
                          <xs:element name="TimeOut" type="xs:unsignedByte" />
                          <xs:element name="RetryCount" type="xs:unsignedByte" />
                          <xs:element name="RetryInterval" type="xs:unsignedByte" />
                          <xs:element name="DownloadFromAad" type="xs:unsignedByte" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="Version" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Examples

  • SyncML to request CSP version information:

    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Get>
          <CmdID>12345</CmdID>
          <Item>
            <Target>
              <LocURI>./Device/Vendor/MSFT/EnterpriseDesktopAppManagement?prop=Type</LocURI>
            </Target>
          </Item>
        </Get>
        <Final/>
      </SyncBody>
    </SyncML>
    

    The following table describes the fields in the previous sample:

    Name Description
    Get Operation being performed. The Get operation is a request to return information.
    CmdID Input value used to reference the request. Responses will include this value that can be used to match request and response.
    LocURI Path to Win32 CSP command processor.
  • SyncML to perform MSI operations for application uninstall:

    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Delete>
          <CmdID>12345</CmdID>
          <Item>
            <Target>
              <LocURI>./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B1803A630-3C38-4D2B-9B9A-0CB37243539C%7D</LocURI>
            </Target>
          </Item>
        </Delete>
        <Final/>
      </SyncBody>
    </SyncML>
    

    The following table describes the fields in the previous sample:

    Name Description
    Delete Operation being performed. The Delete operation is a request to delete the CSP node that represents the specified MSI installed application and to perform and uninstall of the application as part of the process.
    CmdID Input value used to reference the request. Responses will include this value that can be used to match request and response.
    LocURI Path to Win32 CSP command processor, including the Product ID (in this example, 1803A630-3C38-4D2B-9B9A-0CB37243539C) property escaped for XML formatting.
  • SyncML to perform MSI operations for application status reporting:

    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Get>
          <CmdID>12345</CmdID>
          <Item>
            <Target>
              <LocURI>./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B1803A630-3C38-4D2B-9B9A-0CB37243539C%7D</LocURI>
            </Target>
          </Item>
        </Get>
        <Final/>
      </SyncBody>
    </SyncML>
    

    The following table describes the fields in the previous sample:

    Name Description
    Get Operation being performed. The Get operation is a request to report the status of the specified MSI installed application.
    CmdID Input value used to reference the request. Responses will include this value that can be used to match request and response.
    LocURI Path to Win32 CSP command processor, including the Product ID (in this example, 1803A630-3C38-4D2B-9B9A-0CB37243539C) property escaped for XML formatting.
  • SyncML to perform MSI install operations for an application targeted to a specific user on the device. The Add command is required to precede the Exec command.

    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Add>
          <CmdID>1</CmdID>
          <Item>
            <Target>
            <LocURI>./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B1803A630-3C384D2B-9B9A-0CB37243539C%7D/DownloadInstall</LocURI>
            </Target>
          </Item>
        </Add>
        <Exec>
          <CmdID>6</CmdID>
          <Item>
            <Target>
              <LocURI>./User/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B1803A630-3C38-4D2B-9B9A-0CB37243539C%7D/DownloadInstall</LocURI>
            </Target>
            <Meta>
              <Format xmlns="syncml:metinf">xml</Format>
              <Type xmlns="syncml:metinf">text/plain</Type>
            </Meta>
            <Data>
              <MsiInstallJob id="{9BD4F7CD-880A-40B5-B74C-1BEECB51E596}">
                <Product Version="1.0.0">
                  <Download>
                    <ContentURLList>
                      <ContentURL>
                        http://bcl-w2k12r2-vm/testapps/msi/reboot/reboot.msi
                      </ContentURL>
                      <ContentURL>https://dp2.com/packages/myApp.msi</ContentURL>
                    </ContentURLList>
                  </Download>
                  <Validation>
                  <FileHash>134D8F1F7C3C036DC3DCDA9F97515C8C7951DB154B73365C9C22962BD23E3EB3</FileHash>
                  </Validation>
                  <Enforcement>
                    <CommandLine>/quiet</CommandLine>
                    <TimeOut>5</TimeOut>
                    <RetryCount>3</RetryCount>
                    <RetryInterval>5</RetryInterval>
                  </Enforcement>
                </Product>
              </MsiInstallJob>
            </Data>
          </Item>
        </Exec>
        <Final/>
      </SyncBody>
    </SyncML>
    

    The following table describes the fields in the previous sample:

    Name Description
    Add This field is required to precede the Exec command.
  • CmdID - Input value used to reference the request. Responses include this value, which can be used to match the request and response.
  • LocURI - Path to Win32 CSP command processor, including the Product ID (in this example, 1803A630-3C38-4D2B-9B9A-0CB37243539C) property escaped for XML formatting.
  • Exec The Exec node includes the parameters and properties requires to locate, download, validate and perform product installation.
  • CmdID - Input value used to reference the request. Responses will include this value that can be used to match request and response.
  • LocURI - Path to Win32 CSP command processor, including the Product ID (in this example, 1803A630-3C38-4D2B-9B9A-0CB37243539C) property escaped for XML formatting.
  • Data - The Data node contains an embedded XML, of type “MsiInstallJob”
  • MsiInstallJob - Contains all information required for the successful download, validation and execution of the MSI installation process (see section at the end of this document for details on this embedded data object).
  • Note

    Information status on the MSI job will be reported using standard OMA-DM notification mechanism. The status reported is represented using standard MSIEXEC return codes as HRESULT as defined in the MSIEXEC topic on Microsoft TechNet at Msiexec (command-line options).

  • SyncML to perform MSI install operations for an application targeted to all users on the device (per-device installation):

    <SyncML xmlns="SYNCML:SYNCML1.1">
      <SyncBody>
        <Add>
          <CmdID>1</CmdID>
          <Item>
            <Target>
              <LocURI>./Device /Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B6F7CB29F-1319-4816-B345-0856916EB801%7D/DownloadInstall
              </LocURI>
          </Target>
        </Item>
      </Add>
        <Exec>
          <CmdID>67890</CmdID>
          <Item>
            <Target>
              <LocURI>./Device /Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B6F7CB29F-1319-4816-B345-0856916EB801%7D/DownloadInstall</LocURI>
            </Target>
            <Meta>
              <Format xmlns="syncml:metinf">xml</Format>
              <Type xmlns="syncml:metinf">text/plain</Type>
            </Meta>
            <Data>
              <MsiInstallJob id="{9BD4F7CD-880A-40B5-B74C-1BEECB51E596}">
                <Product Version="1.0.0">
                  <Download>
                    <ContentURLList>
                      <ContentURL>http://bcl-w2k12r2-vm/testapps/msi/Orca/Orca.msi</ContentURL>
                      <ContentURL>https://dp2.com/packages/myApp.msi</ContentURL>
                    </ContentURLList>
                  </Download>
                  <Validation>
                    <FileHash>4525065777EF18B9444ABF71DD4B48E5F64F4F0E1E029995FB8DA441CDE4296E</FileHash>
                  </Validation>
                  <Enforcement>
                    <CommandLine>/quiet</CommandLine>
                    <TimeOut>5</TimeOut>
                    <RetryCount>3</RetryCount>
                    <RetryInterval>5</RetryInterval>
                  </Enforcement>
                </Product>
              </MsiInstallJob>
            </Data>
          </Item>
        </Exec>
        <Final/>
      </SyncBody>
    </SyncML>
    

    The following table MsiInstallJob describes the schema elements.

    Element Description
    MsiInstallJob root element
    Attribute: "id" - the application identifier of the application being installed
    Product child element of MsiInstallJob
    Attribute: "Version" - string representation of application version
    Download child element of Product. Container for download configuration information.
    ContentURLList child element of Download. Contains list of one or more content download URL locators in the form of ContentURL elements.
    ContentURL Location content should be downloaded from. Must be a property formatted URL that points to the .MSI file.
    Validation Contains information used to validate contend authenticity. • FileHash - SHA256 hash value of file content
    FileHash SHA256 hash value of file content
    Enforcement installation properties to be used when installing this MSI
    CommandLine Command-line options to be used when calling MSIEXEC.exe
    TimeOut Amount of time, in minutes that the installation process can run before the installer considers the installation may have failed and no longer monitors the installation operation.
    RetryCount The number of times the download and installation operation will be retried before the installation will be marked as failed.
    RetryInterval Amount of time, in minutes between retry operations.

    Here's an example of a common response to a request

    <?xml version="1.0" encoding="utf-16"?>
    <SyncML>
      <SyncHdr />
      <SyncBody>
        <Status>
          <CmdID>12345</CmdID>
          <MsgRef>1</MsgRef>
          <CmdRef>0</CmdRef>
          <Cmd>SyncHdr</Cmd>
          <Data>200</Data>
        </Status>
        <Status>
          <CmdID>67890</CmdID>
          <MsgRef>1</MsgRef>
          <CmdRef>1</CmdRef>
          <Cmd>Add</Cmd>
          <Data>200</Data>
        </Status>
        <Final />
      </SyncBody>
    </SyncML>
    

How to determine which installation context to use for an MSI package

The following tables show how app targeting and MSI package type (per-user, per machine, or dual mode) are installed in the client.

For Intune standalone environment, the MSI package will determine the MSI execution context.

Target Per-user MSI Per-machine MSI Dual mode MSI
User Install the MSI per-user
LocURI contains a User prefix, such as ./User
Install the MSI per-device
LocURI contains a Device prefix, such as ./Device
Install the MSI per-user
LocURI contains a User prefix, such as ./User
System Install the MSI per-user
LocURI contains a User prefix, such as ./User
Install the MSI per-device
LocURI contains a Device prefix, such as ./Device
Install the MSI per-user
LocURI contains a User prefix, such as ./User

The following table applies to Configuration Manager hybrid environment:

Target Per-user MSI Per-machine MSI Dual mode MSI
User Install the MSI per-user
LocURI contains a User prefix, such as ./User
Install the MSI per-device
LocURI contains a Device prefix, such as ./Device
Install the MSI per-user
LocURI contains a User prefix, such as ./User
System Install the MSI per-user
LocURI contains a User prefix, such as ./User
Install the MSI per-device
LocURI contains a Device prefix, such as ./Device
Install the MSI per- system context
LocURI contains a Device prefix, such as ./Device

How to determine the package type from the MSI package

  • ALLUSERS="" - per-user package type
  • ALLUSERS=1 - per-machine package type
  • ALLUSERS=2, MSIINSTALLPERUSER=1 - dual mode package type

Properties can be specified in the package, passed through the command line, modified by a transform, or (more commonly) selected through a user interface dialog.

Here's a list of references:

Alert example

<Alert>
   <CmdID>4</CmdID>
   <Data>1224</Data>
   <Item>
      <Source>
         <LocURI>./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/{AF9257BA-6BBD-4624-AA9B-0182D50292C3}/DownloadInstall</LocURI>
      </Source>
      <Meta>
         <Type xmlns="syncml:metinf">Reversed-Domain-Name:com.microsoft.mdm.win32csp_install</Type>
         <Format xmlns="syncml:metinf">int</Format>
         <Mark xmlns="syncml:metinf">informational</Mark>
      </Meta>
      <Data>0</Data>
   </Item>
</Alert>

Configuration service provider reference