Gerenciamento de aplicativos corporativos

Este artigo aborda um dos principais recursos de MDM (gerenciamento de dispositivo móvel) Windows 10. Ele gerencia o ciclo de vida de aplicativos em todos os Windows. É a capacidade de gerenciar aplicativos da Store e não Da Store como parte dos recursos nativos do MDM. A novidade Windows 10 é a capacidade de fazer inventário de todos os seus aplicativos.

Metas de gerenciamento de aplicativos

Windows 10 oferece a capacidade de servidores de gerenciamento:

  • Instalar aplicativos diretamente do Microsoft Store para Empresas
  • Implantar licenças e aplicativos offline da Store
  • Implantar aplicativos de linha de negócios (LOB) (aplicativos que não são da Store)
  • Inventariar todos os aplicativos para um usuário (aplicativos da Loja e que não são da Store)
  • Inventariar todos os aplicativos para um dispositivo (aplicativos da Loja e que não são da Store)
  • Desinstalar todos os aplicativos para um usuário (aplicativos da Loja e não Da Store)
  • Provisionar aplicativos para que eles são instalados para todos os usuários de um dispositivo que executa o Windows 10 para edições desktop (Home, Pro, Enterprise e Education)
  • Remover o aplicativo provisionado no dispositivo que executa o Windows 10 para edições da área de trabalho

Inventariar seus aplicativos

Windows 10 permite inventariar todos os aplicativos implantados em um usuário e inventariar todos os aplicativos para todos os usuários de um dispositivo no Windows 10 para edições da área de trabalho. O provedor de serviços de configuração (CSP) EnterpriseModernAppManagement empacota aplicativos e não inclui aplicativos Win32 tradicionais instalados por meio de MSI ou executáveis. Quando os aplicativos são inventariados, eles são separados com base nas seguintes classificações de aplicativo:

  • Store – aplicativos que são do Microsoft Store. Os aplicativos podem ser instalados diretamente da Loja ou entregues com a empresa da Store para Empresas
  • nonStore – aplicativos que não foram adquiridos do Microsoft Store.
  • Sistema – Aplicativos que fazem parte do sistema operacional. Não é possível desinstalar esses aplicativos. Essa classificação é somente leitura e só pode ser inventariada.

Essas classificações são representadas como nós no CSP EnterpriseModernAppManagement.

As informações a seguir mostram o CSP EnterpriseModernAppManagement em um formato de árvore:

./Device/Vendor/MSFT 
or
./User/Vendor/MSFT
EnterpriseAppManagement
----AppManagement
--------UpdateScan
--------LastScanError
--------AppInventoryResults
--------AppInventoryQuery
--------RemovePackage
--------AppStore
----------PackageFamilyName
------------PackageFullName
--------------Name
--------------Version
--------------Publisher
--------------Architecture
--------------InstallLocation
--------------IsFramework
--------------IsBundle
--------------InstallDate
--------------ResourceID
--------------RequiresReinstall
--------------PackageStatus
--------------Users
--------------IsProvisioned
--------------IsStub
------------DoNotUpdate
------------AppSettingPolicy
--------------SettingValue
------------MaintainProcessorArchitectureOnUpdate
------------NonRemovable
----------ReleaseManagement
------------ReleaseManagementKey
--------------ChannelId
--------------ReleaseId
--------------EffectiveRelease
-----------------ChannelId
-----------------ReleaseId
--------nonStore
----------PackageFamilyName
------------PackageFullName
--------------Name
--------------Version
--------------Publisher
--------------Architecture
--------------InstallLocation
--------------IsFramework
--------------IsBundle
--------------InstallDate
--------------ResourceID
--------------RequiresReinstall
--------------PackageStatus
--------------Users
--------------IsProvisioned
--------------IsStub
------------DoNotUpdate
------------AppSettingPolicy
--------------SettingValue
------------MaintainProcessorArchitectureOnUpdate
------------NonRemoveable
--------System
----------PackageFamilyName
------------PackageFullName
--------------Name
--------------Version
--------------Publisher
--------------Architecture
--------------InstallLocation
--------------IsFramework
--------------IsBundle
--------------InstallDate
--------------ResourceID
--------------RequiresReinstall
--------------PackageStatus
--------------Users
--------------IsProvisioned
--------------IsStub
------------DoNotUpdate
------------AppSettingPolicy
--------------SettingValue
------------MaintainProcessorArchitectureOnUpdate
------------NonRemoveable
----AppInstallation
--------PackageFamilyName
----------StoreInstall
----------HostedInstall
----------LastError
----------LastErrorDesc
----------Status
----------ProgressStatus
----AppLicenses
--------StoreLicenses
----------LicenseID
------------LicenseCategory
------------LicenseUsage
------------RequesterID
------------AddLicense
------------GetLicenseFromStore

Cada aplicativo exibe um nome de família de pacotes e nomes completos de pacote de 1-n para aplicativos instalados. Os aplicativos são categorizados com base em sua origem (Store, nãoStore, Sistema).

O inventário pode ser executado recursivamente em qualquer nível do nó AppManagement por meio do nome completo do pacote. O inventário também pode ser executado somente para um atributo de inventário específico.

O inventário é específico para o nome completo do pacote e lista pacotes agrupados e pacotes de recursos, conforme aplicável sob o nome da família de pacotes.

Aqui estão os nós para cada nome completo do pacote:

  • Nome
  • Versão
  • Editor
  • Arquitetura
  • Installlocation
  • IsFramework
  • IsBundle
  • InstallDate
  • Resourceid
  • RequiresReinstall
  • PackageStatus
  • Users
  • IsProvisioned

Para obter descrições detalhadas de cada nó, consulte CSP EnterpriseModernAppManagement.

Inventário de aplicativos

Você pode usar o CSP EnterpriseModernAppManagement para consultar todos os aplicativos instalados para um usuário ou dispositivo. A consulta retorna todos os aplicativos, mesmo que eles foram instalados usando MDM ou outros métodos. O inventário pode ser executado no nível do usuário ou do dispositivo. O inventário no nível do dispositivo retornará informações para todos os usuários no dispositivo.

Fazer um inventário completo de um dispositivo pode ter uso intensivo de recursos com base no hardware e no número de aplicativos instalados. Os dados retornados também podem ser grandes. Talvez você queira dividir essas solicitações para reduzir o impacto nos clientes e no tráfego de rede.

Aqui está um exemplo de uma consulta para todos os aplicativos no dispositivo.

<!-- Get all apps under AppManagement -->
<Get>
   <CmdID>1</CmdID>
   <Item>
      <Target>
         <LocURI>./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement?list=StructData</LocURI>
      </Target>
   </Item>
</Get>

Aqui está um exemplo de uma consulta para um aplicativo específico para um usuário.

<!-- 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>

Armazenar inventário de licenças

Você pode usar o CSP EnterpriseModernAppManagement para consultar todas as licenças de aplicativo instaladas para um usuário ou dispositivo. A consulta retornará todas as licenças do aplicativo, caso elas foram instaladas por meio do MDM ou de outros métodos. O inventário pode ser executado no nível do usuário ou do dispositivo. O inventário no nível do dispositivo retornará informações para todos os usuários no dispositivo.

Aqui estão os nós para cada ID de licença:

  • LicenseCategory
  • LicenseUsage
  • RequestedID

Para obter descrições detalhadas de cada nó, consulte CSP EnterpriseModernAppManagement.

Observação

A LicenseID no CSP é a ID de conteúdo da licença.

Aqui está um exemplo de uma consulta para todas as licenças de aplicativo em um dispositivo.

<!-- 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>

Aqui está um exemplo de uma consulta para todas as licenças de aplicativo para um usuário.

<!-- 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>

Habilitar o dispositivo para instalar aplicativos que não são da Store

Há dois tipos básicos de aplicativos que você pode implantar: aplicativos da Loja e aplicativos assinados pela empresa. Para implantar aplicativos assinados pela empresa, você deve habilitar uma configuração no dispositivo para permitir aplicativos confiáveis. Os aplicativos podem ser assinados por uma raiz aprovada pela Microsoft (como a Symantec), uma raiz implantada pela empresa ou aplicativos autoassinados. Esta seção aborda as etapas para configurar o dispositivo para implantação de aplicativos que não são da loja.

Desbloquear o dispositivo para aplicativos que não são da Store

Para implantar aplicativos que não são do Microsoft Store, você deve configurar a política ApplicationManagement/AllowAllTrustedApps. Essa política permite a instalação de aplicativos que não são da Store no dispositivo se houver uma cadeia para um certificado no dispositivo. O aplicativo pode ser assinado com um certificado raiz no dispositivo (como o Symantec Enterprise), um certificado raiz de propriedade corporativa ou um certificado de confiança de par implantado no dispositivo. Para obter mais informações sobre como implantar a licença de usuário, consulte Implantar uma licença offline para um usuário.

A política AllowAllTrustedApps habilita os aplicativos de instalação confiáveis por um certificado nas Pessoas Confiáveis no dispositivo ou um certificado raiz na Raiz Confiável do dispositivo. A política não é configurada por padrão, o que significa que somente aplicativos do Microsoft Store podem ser instalados. Se o servidor de gerenciamento definir implicitamente o valor como desativado, a configuração será desabilitada no painel de configurações do dispositivo.

Para obter mais informações sobre a política AllowAllTrustedApps, consulte csp de política.

Aqui estão alguns exemplos.

<!-- 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>

Desbloquear o dispositivo para o modo de desenvolvedor

O desenvolvimento de aplicativos Windows 10 não requer mais uma licença especial. Você pode habilitar a depuração e a implantação de aplicativos não empacotados usando a política ApplicationManagement/AllowDeveloperUnlock no CSP de Política.

A política AllowDeveloperUnlock habilita o modo de desenvolvimento no dispositivo. O AllowDeveloperUnlock não está configurado por padrão, o que significa Microsoft Store aplicativos podem ser instalados. Se o servidor de gerenciamento definir explicitamente o valor como desativado, a configuração será desabilitada no painel de configurações do dispositivo.

A implantação de aplicativos Windows 10 para edições da área de trabalho requer que haja uma cadeia para um certificado no dispositivo. O aplicativo pode ser assinado com um certificado raiz no dispositivo (como o Symantec Enterprise), um certificado raiz de propriedade corporativa ou um certificado de confiança de par implantado no dispositivo.

Para obter mais informações sobre a política AllowDeveloperUnlock, consulte csp de política.

Veja um exemplo.

<!-- 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>

Instalar seus aplicativos

Você pode instalar aplicativos para um usuário específico ou para todos os usuários de um dispositivo. Os aplicativos são instalados diretamente do Microsoft Store. Ou, eles são instalados de um local de host, como um disco local, um caminho UNC ou um local HTTPS. Use o nó AppInstallation do CSP EnterpriseModernAppManagement para instalar aplicativos.

Implantar aplicativos para o usuário da Loja

Para implantar um aplicativo em um usuário diretamente do Microsoft Store, o servidor de gerenciamento executa um comando Add and Exec no nó AppInstallation do CSP EnterpriseModernAppManagement. Esse recurso só tem suporte no contexto do usuário e não tem suporte no contexto do dispositivo.

Se você comprou um aplicativo da Store para Empresas e o aplicativo é especificado para uma licença online, o aplicativo e a licença devem ser adquiridos diretamente do Microsoft Store.

Estes são os requisitos para este cenário:

  • O aplicativo é atribuído a uma identidade de Azure Active Directory (Azure AD) na Store para Empresas. Você pode atribuir diretamente na Loja para Empresas ou por meio de um servidor de gerenciamento.
  • O dispositivo requer conectividade com o Microsoft Store.
  • Microsoft Store serviços devem ser habilitados no dispositivo. A interface do usuário do Microsoft Store pode ser desabilitada pelo administrador corporativo.
  • O usuário deve estar conectado com sua Azure AD identidade.

Aqui estão alguns exemplos.

<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>

Aqui estão as alterações da versão anterior:

  1. A referência "{CatID}" deve ser atualizada para "{ProductID}". Esse valor é adquirido como parte da ferramenta de gerenciamento da Store para Empresas.

  2. O valor dos sinalizadores pode ser "0" ou "1"

    Ao usar "0", a ferramenta de gerenciamento chama de volta para a sincronização da Loja para Empresas para atribuir a um usuário uma estação de um aplicativo. Ao usar "1", a ferramenta de gerenciamento não liga novamente para a sincronização da Loja para Empresas para atribuir a um usuário uma estação de um aplicativo. O CSP solicitará um assento se houver um disponível.

  3. É skuid um novo parâmetro que é necessário. Esse valor é adquirido como parte da sincronização da ferramenta de gerenciamento da Store para Empresas.

Implantar uma licença offline para um usuário

Se você comprou um aplicativo da Store para Empresas, a licença do aplicativo deve ser implantada no dispositivo.

A licença do aplicativo só precisa ser implantada como parte da instalação inicial do aplicativo. Durante uma atualização, somente o aplicativo é implantado no usuário.

No SyncML, você precisa especificar as seguintes informações no comando Exec:

  • ID da licença – essa ID é especificada no LocURI. A ID da licença para a licença offline é conhecida como "ID de conteúdo" no arquivo de licença. Você pode recuperar essas informações do download de licença codificada em Base64 da Store para Empresas.
  • Conteúdo da Licença – Este conteúdo é especificado na seção de dados. O Conteúdo da Licença é o blob codificado em Base64 da licença.

Aqui está um exemplo de uma instalação de licença offline.

<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>

Implantar aplicativos em um usuário de um local hospedado

Se você comprou um aplicativo da Store para Empresas e o aplicativo é especificado para uma licença offline ou se o aplicativo é um aplicativo que não é da Store, o aplicativo deve ser implantado de um local hospedado.

Estes são os requisitos para este cenário:

  • O local do aplicativo pode ser um sistema de arquivos locais (C:\StagedApps\app1.appx), um caminho UNC (\\server\share\app1.apx) ou um local HTTPS (https://contoso.com/app1.appx).
  • O usuário deve ter permissão para acessar o local do conteúdo. Para HTTPs, você pode usar autenticação de servidor ou autenticação de certificado usando um certificado associado ao registro. Há suporte para locais HTTP, mas não recomendados devido à falta de requisitos de autenticação.
  • O dispositivo não precisa ter conectividade com o Microsoft Store, armazenar serviços ou habilitar Microsoft Store interface do usuário.
  • O usuário deve estar conectado, mas a associação com Azure AD identidade não é necessária.

Observação

Você deve desbloquear o dispositivo para implantar aplicativos nãoStore ou implantar a licença do aplicativo antes de implantar os aplicativos offline. Para obter detalhes, consulte Implantar uma licença offline para um usuário.

O comando Adicionar para o nome da família de pacotes é necessário para garantir a remoção adequada do aplicativo no cancelamento do registro.

Aqui está um exemplo de uma instalação de aplicativo de linha de negócios.

<!-- 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>

Aqui está um exemplo de uma instalação de aplicativo com dependências.

<!-- 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>

Aqui está um exemplo de uma instalação de aplicativo com dependências e pacotes opcionais.

<!-- 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>

Provisionar aplicativos para todos os usuários de um dispositivo

O provisionamento permite preparar o aplicativo para o dispositivo e todos os usuários do dispositivo podem ter o aplicativo registrado no próximo logon. Esse recurso só tem suporte para o aplicativo adquirido na Loja para Empresas e o aplicativo é especificado para uma licença offline ou o aplicativo é um aplicativo que não é da Store. O aplicativo deve ser oferecido de um local hospedado. O aplicativo é instalado como um sistema local. Para instalar em um compartilhamento de arquivos local, o "sistema local" do dispositivo deve ter acesso ao compartilhamento.

Estes são os requisitos para este cenário:

  • O local do aplicativo pode ser o sistema de arquivos locais (C:\StagedApps\app1.appx), um caminho UNC (\\server\share\app1.apx) ou um local HTTPS (https://contoso.com/app1.appx\)
  • O usuário deve ter permissão para acessar o local do conteúdo. Para HTTPs, você pode usar autenticação de servidor ou autenticação de certificado usando um certificado associado ao registro. Há suporte para locais HTTP, mas não recomendados devido à falta de requisitos de autenticação.
  • O dispositivo não precisa ter conectividade com o Microsoft Store ou armazenar serviços habilitados.
  • O dispositivo não precisa de nenhuma identidade Azure AD ou associação de domínio.
  • Para o aplicativo nãoStore, seu dispositivo deve ser desbloqueado.
  • Para aplicativos offline da Store, as licenças necessárias devem ser implantadas antes de implantar os aplicativos.

Para provisionar o aplicativo para todos os usuários de um dispositivo de um local hospedado, o servidor de gerenciamento executa um comando Add and Exec no nó AppInstallation no contexto do dispositivo. O comando Adicionar para o nome da família de pacotes é necessário para garantir a remoção adequada do aplicativo no cancelamento do registro.

Observação

Quando você remover o aplicativo provisionado, ele não o removerá dos usuários que já instalaram o aplicativo.

Aqui está um exemplo de instalação do aplicativo.

Observação

Isso só tem suporte no Windows 10 para edições da área de trabalho.

<!-- 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>

O comando HostedInstall Exec contém um nó de dados que requer um XML inserido. Aqui estão os requisitos para o XML de dados:

  • O nó do aplicativo tem um parâmetro necessário, PackageURI, que pode ser um local de arquivo local, UNC ou HTTPS.
  • As dependências podem ser especificadas se necessário para serem instaladas com o pacote. Isso é opcional.

O parâmetro DeploymentOptions só está disponível no contexto do usuário.

Aqui está um exemplo de instalação de aplicativo com dependências.

Observação

Isso só tem suporte no Windows 10 para edições da área de trabalho.

<!-- 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>

Obter o status das instalações do aplicativo

Quando uma instalação de aplicativo é concluída, uma Windows é enviada. Você também pode consultar o status do uso do nó AppInstallation. Aqui está a lista de informações que você pode obter de volta na consulta:

  • Status – indica o status da instalação do aplicativo.

    • NOT_INSTALLED (0) - O nó foi adicionado, mas a execução não foi concluída.
    • INSTALLING (1) – A execução foi iniciada, mas a implantação não foi concluída. Se a implantação for concluída independentemente do sucesso, esse valor será atualizado.
    • FALHA (2) – Falha na instalação. Os detalhes do erro podem ser encontrados em LastError e LastErrorDescription.
    • INSTALLED (3) - Depois que uma instalação for bem-sucedida, esse nó será limpo. Se a ação de limpeza não tiver sido concluída, esse estado poderá aparecer brevemente.
  • LastError – o último erro relatado pelo servidor de implantação de aplicativos.

  • LastErrorDescription – Descreve o último erro relatado pelo servidor de implantação de aplicativo.

  • Status – um inteiro que indica o progresso da instalação do aplicativo. Em casos de um local HTTPS, esse status mostra o progresso estimado do download.

    O status não está disponível para provisionamento e só é usado para instalações baseadas no usuário. Para provisionamento, o valor é sempre 0.

Quando um aplicativo é instalado com êxito, o nó é limpo e não está mais presente. O status do aplicativo pode ser relatado no nó AppManagement.

Aqui está um exemplo de uma consulta para uma instalação de aplicativo específica.

<!-- 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>

Aqui está um exemplo de uma consulta para todas as instalações do aplicativo.

<!-- Get all app status under AppInstallation-->
<Get>
   <CmdID>2</CmdID>
   <Item>
      <Target>    
         <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation?list=StructData</LocURI>
      </Target>
   </Item>
</Get>

Alerta para conclusão da instalação

As instalações de aplicativos podem levar algum tempo para serem concluídas. Então, eles são feitos de forma assíncrona. Quando o comando Exec é concluído, o cliente envia uma notificação para o servidor de gerenciamento com um status, seja ele uma falha ou êxito.

Aqui está um exemplo de um alerta.

<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>

Para instalação baseada no usuário, use o caminho ./User e, para provisionamento de aplicativos, use o caminho ./Device.

O valor do campo Dados de 0 (zero) indica êxito. Caso contrário, será um código de erro. Se houver uma falha, você poderá obter mais detalhes do nó AppInstallation.

Observação

No momento, o alerta para a instalação do aplicativo da Store ainda não está disponível.

Desinstalar seus aplicativos

Você pode desinstalar aplicativos de usuários de Windows 10 dispositivos. Para desinstalar um aplicativo, exclua-o do nó AppManagement do CSP. No nó AppManagement, os pacotes são organizados com base em sua origem de acordo com os seguintes nós:

  • AppStore – Esses aplicativos são para o Microsoft Store. Os aplicativos podem ser instalados diretamente da loja ou entregues à empresa da Store para Empresas.
  • nonStore – esses aplicativos que não foram adquiridos do Microsoft Store.
  • Sistema – Esses aplicativos fazem parte do sistema operacional. Não é possível desinstalar esses aplicativos.

Para desinstalar um aplicativo, exclua-o no nó de origem, no nome da família de pacotes e no nome completo do pacote. Para desinstalar um XAP, use a ID do produto no lugar do nome da família de pacotes e do nome completo do pacote.

Aqui está um exemplo para desinstalar todas as versões de um aplicativo para um usuário.

<!-- Uninstall App for a Package Family-->
<Delete>
   <CmdID>1</CmdID>
   <Item>
      <Target>
         <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/AppStore/{PackageFamilyName}</LocURI>
      </Target>
   </Item>
</Delete>

Aqui está um exemplo para desinstalar uma versão específica do aplicativo para um usuário.

<!-- 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>

Removidos aplicativos provisionados de um dispositivo

Você pode remover aplicativos provisionados de um dispositivo para uma versão específica ou para todas as versões de uma família de pacotes. Quando um aplicativo provisionado é removido, ele não está disponível para usuários futuros para o dispositivo. Os usuários conectados que têm o aplicativo registrado para eles continuarão a ter acesso ao aplicativo. Se você quiser remover o aplicativo para esses usuários, deverá desinstalar explicitamente o aplicativo para esses usuários.

Observação

Você só pode remover um aplicativo que tenha um valor de inventário IsProvisioned = 1.

A remoção do aplicativo provisionado ocorre no contexto do dispositivo.

Aqui está um exemplo para remover um aplicativo provisionado de um dispositivo.

<!— 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>

Aqui está um exemplo para remover uma versão específica de um aplicativo provisionado de um dispositivo:

<!-- 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>

Remover uma licença de aplicativo da loja

Você pode remover licenças de aplicativo de um dispositivo por aplicativo com base na ID de conteúdo.

Aqui está um exemplo para remover uma licença de aplicativo para um usuário.

<!-- 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>

Aqui está um exemplo para remover uma licença de aplicativo para um pacote provisionado (contexto do dispositivo).

<!-- 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>

Alerta para desinstalação de aplicativos

A desinstalação de um aplicativo pode levar algum tempo para ser concluída. Portanto, a desinstalação é executada de forma assíncrona. Quando o comando Exec é concluído, o cliente envia uma notificação para o servidor de gerenciamento com um status, seja ele uma falha ou êxito.

Para desinstalação baseada em usuário, use ./User no LocURI e, para provisionamento, use ./Device no LocURI.

Veja um exemplo. Há apenas uma desinstalação para aplicativos hospedados e da loja.

<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>

Atualizar seus apps

Os aplicativos instalados em um dispositivo podem ser atualizados usando o servidor de gerenciamento. Os aplicativos podem ser atualizados diretamente da loja ou instalados de um local hospedado.

Atualizar aplicativos diretamente da loja

Para atualizar um aplicativo do Microsoft Store, o dispositivo requer contato com os serviços da loja.

Aqui está um exemplo de uma verificação de atualização.

<!— Initiate a update scan for a user-->
<Exec>
   <CmdID>1</CmdID>
   <Item>
      <Target>
         <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppManagement/UpdateScan</LocURI>
      </Target>
   </Item>
</Exec>

Aqui está um exemplo de uma verificação de status.

<!— 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>

Atualizar aplicativos de um local hospedado

A atualização de um aplicativo existente segue o mesmo processo de uma instalação inicial. Para obter mais informações, consulte Implantar aplicativos em um usuário de um local hospedado.

Atualizar aplicativos provisionados

Um aplicativo provisionado é atualizado automaticamente quando uma atualização de aplicativo é enviada ao usuário. Você também pode atualizar um aplicativo provisionado usando o mesmo processo que um provisionamento inicial. Para obter mais informações sobre o provisionamento inicial, consulte Provisionar aplicativos para todos os usuários de um dispositivo.

Impedir que o aplicativo atualizações automáticas

Você pode impedir que aplicativos específicos sejam atualizados automaticamente. Esse recurso permite ativar atualizações automáticas para aplicativos, com aplicativos específicos excluídos, conforme definido pelo administrador de TI.

Desativar atualizações só se aplica a atualizações do Microsoft Store no nível do dispositivo. Esse recurso não está disponível no nível do usuário. Você ainda poderá atualizar um aplicativo se os pacotes offline forem enviados por push do local de instalação hospedado.

Veja um exemplo.

<!— 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>

Mais cenários de gerenciamento de aplicativos

As subseções a seguir fornecem informações sobre mais configurações.

Habilitar dados de aplicativo de usuário compartilhado

O aplicativo Windows Universal pode compartilhar dados do aplicativo entre os usuários do dispositivo. A capacidade de compartilhar dados pode ser definida em um nível de família de pacotes ou por dispositivo.

Observação

Isso só é aplicável a dispositivos de vários usuários.

A política AllowSharedUserAppData no CSP de Política permite ou desabilita pacotes de aplicativos para compartilhar dados entre pacotes de aplicativos quando há vários usuários. Se você habilitar essa política, os aplicativos poderão compartilhar dados entre pacotes em sua família de pacotes. Os dados podem ser compartilhados por meio da pasta ShareLocal para a família de pacotes e o computador local. Essa pasta está disponível por meio do Windows.Armazenamento API.

Se você desabilitar essa política, os aplicativos não poderão compartilhar dados de aplicativo de usuário entre vários usuários. No entanto, os dados compartilhados pré-gravados persistirão. Os dados compartilhados pré-gravados limpos usam DISM ((/Get-ProvisionedAppxPackage para detectar se há dados compartilhados e /Remove-SharedAppxData para removê-los).

Os valores válidos são 0 (desativado, valor padrão) e 1 (ativado).

Veja um exemplo.

<!-- 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>