Gestione di app aziendali

Questo articolo illustra una delle principali funzionalità di gestione dei dispositivi mobili (MDM) in Windows 10. Gestisce il ciclo di vita delle app in tutte le finestre. È la possibilità di gestire app dello Store e non dello Store come parte delle funzionalità MDM native. Novità di Windows 10 è la possibilità di eseguire l'inventario di tutte le app.

Obiettivi di gestione delle applicazioni

Windows 10 offre la possibilità per i server di gestione di:

  • Installare le app direttamente dal Microsoft Store per le aziende
  • Distribuire app e licenze dello Store offline
  • Distribuire app line-of-business (LOB) (app non dello Store)
  • Inventario di tutte le app per un utente (app dello Store e non dello Store)
  • Inventario di tutte le app per un dispositivo (app dello Store e non dello Store)
  • Disinstallare tutte le app per un utente (app dello Store e non dello Store)
  • Effettuare il provisioning delle app in modo che vengano installate per tutti gli utenti di un dispositivo che esegue Windows 10 per le edizioni desktop (Home, Pro, Enterprise ed Education)
  • Rimuovere l'app di cui è stato effettuato il provisioning nel dispositivo che esegue Windows 10 per le edizioni desktop

Inventariare le app

Windows 10 consente di inventariare tutte le app distribuite a un utente e di inventariare tutte le app per tutti gli utenti di un dispositivo in Windows 10 per le edizioni desktop. Il provider del servizio di configurazione EnterpriseModernAppManagement (CSP) inventaria le app in pacchetto e non include le app Win32 tradizionali installate tramite MSI o eseguibili. Quando le app vengono inventariate, vengono separate in base alle classificazioni delle app seguenti:

  • Store: app provenienti da Microsoft Store. Le app possono essere installate direttamente dallo Store o distribuite con l'azienda dallo Store per le aziende
  • nonStore: app non acquisite da Microsoft Store.
  • Sistema: app che fanno parte del sistema operativo. Non è possibile disinstallare queste app. Questa classificazione è di sola lettura e può essere inventariata solo.

Queste classificazioni sono rappresentate come nodi nel CSP EnterpriseModernAppManagement.

Le informazioni seguenti mostrano il provider di servizi di configurazione EnterpriseModernAppManagement in formato albero:

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

Ogni app visualizza un nome di famiglia di pacchetti e 1-n nomi completi per le app installate. Le app vengono categorizzate in base alla loro origine (Store, nonStore, System).

L'inventario può essere eseguito in modo ricorsivo a qualsiasi livello dal nodo AppManagement tramite il nome completo del pacchetto. L'inventario può essere eseguito anche solo per un attributo di inventario specifico.

L'inventario è specifico per il nome completo del pacchetto e gli elenchi di pacchetti e pacchetti di risorse in bundle, come applicabile nel nome della famiglia di pacchetti.

Di seguito sono riportati i nodi per ogni nome completo del pacchetto:

  • Nome
  • Versione
  • Pubblicato da
  • Architecture
  • InstallLocation
  • IsFramework
  • IsBundle
  • InstallDate
  • Resourceid
  • RequiresReinstall
  • PackageStatus
  • Utenti
  • IsProvisioned

Per descrizioni dettagliate di ogni nodo, vedere EnterpriseModernAppManagement CSP.

Inventario delle app

È possibile usare il provider di servizi di configurazione EnterpriseModernAppManagement per eseguire query per tutte le app installate per un utente o un dispositivo. La query restituisce tutte le app, anche se sono state installate usando MDM o altri metodi. L'inventario può essere eseguito a livello di utente o dispositivo. L'inventario a livello di dispositivo restituirà informazioni per tutti gli utenti del dispositivo.

L'esecuzione di un inventario completo di un dispositivo può richiedere molte risorse in base all'hardware e al numero di app installate. Anche i dati restituiti possono essere di grandi dimensioni. È possibile suddividere in blocchi queste richieste per ridurre l'impatto sui client e sul traffico di rete.

Ecco un esempio di query per tutte le app nel dispositivo.

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

Di seguito è riportato un esempio di query per un'app specifica per un utente.

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

Inventario delle licenze dello Store

È possibile usare il provider di servizi di configurazione EnterpriseModernAppManagement per eseguire una query per tutte le licenze dell'app installate per un utente o un dispositivo. La query restituisce tutte le licenze dell'app, evento se sono state installate tramite MDM o altri metodi. L'inventario può essere eseguito a livello di utente o dispositivo. L'inventario a livello di dispositivo restituirà informazioni per tutti gli utenti del dispositivo.

Di seguito sono riportati i nodi per ogni ID licenza:

  • LicenseCategory
  • LicenseUsage
  • RequestedID

Per descrizioni dettagliate di ogni nodo, vedere EnterpriseModernAppManagement CSP.

Nota

LicenseID nel CSP è l'ID contenuto per la licenza.

Ecco un esempio di query per tutte le licenze dell'app in un 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>

Ecco un esempio di query per tutte le licenze dell'app per un utente.

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

Abilitare il dispositivo per installare app non nello Store

Esistono due tipi di app di base che è possibile distribuire: app dello Store e app firmate dall'organizzazione. Per distribuire app firmate dall'organizzazione, è necessario abilitare un'impostazione nel dispositivo per consentire app attendibili. Le app possono essere firmate da una radice approvata da Microsoft (ad esempio Symantec), da una radice distribuita dall'organizzazione o da app autofirmate. Questa sezione illustra i passaggi per configurare il dispositivo per la distribuzione di app non nello Store.

Sbloccare il dispositivo per le app non dello Store

Per distribuire app non provenienti da Microsoft Store, è necessario configurare i criteri ApplicationManagement/AllowAllTrustedApps. Questo criterio consente l'installazione di app non dello Store nel dispositivo se è presente una catena a un certificato nel dispositivo. L'app può essere firmata con un certificato radice nel dispositivo (ad esempio Symantec Enterprise), un certificato radice di proprietà dell'organizzazione o un certificato di trust peer distribuito nel dispositivo. Per altre informazioni sulla distribuzione della licenza utente, vedere Distribuire una licenza offline a un utente.

Il criterio AllowAllTrustedApps abilita le app di installazione considerate attendibili da un certificato nel Persone attendibile nel dispositivo o da un certificato radice nella radice attendibile del dispositivo. Il criterio non è configurato per impostazione predefinita, il che significa che è possibile installare solo le app di Microsoft Store. Se il server di gestione imposta in modo implicito il valore su off, l'impostazione viene disabilitata nel pannello delle impostazioni del dispositivo.

Per altre informazioni sui criteri AllowAllTrustedApps, vedere Policy CSP.For more information about the AllowAllTrustedApps policy CSP.

Ecco alcuni esempi.

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

Sbloccare il dispositivo per la modalità sviluppatore

Lo sviluppo di app in Windows 10 non richiede più una licenza speciale. È possibile abilitare il debug e la distribuzione di app non in pacchetto usando i criteri ApplicationManagement/AllowDeveloperUnlock in Policy CSP.

I criteri AllowDeveloperUnlock abilitano la modalità di sviluppo nel dispositivo. AllowDeveloperUnlock non è configurato per impostazione predefinita, il che significa che è possibile installare solo le app di Microsoft Store. Se il server di gestione imposta in modo esplicito il valore su off, l'impostazione viene disabilitata nel pannello delle impostazioni del dispositivo.

Per la distribuzione di app in Windows 10 per le edizioni desktop è necessaria una catena per un certificato nel dispositivo. L'app può essere firmata con un certificato radice nel dispositivo (ad esempio Symantec Enterprise), un certificato radice di proprietà dell'organizzazione o un certificato di trust peer distribuito nel dispositivo.

Per altre informazioni sui criteri AllowDeveloperUnlock, vedere Policy CSP.

Ecco un esempio.

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

Installare le app

È possibile installare le app per un utente specifico o per tutti gli utenti di un dispositivo. Le app vengono installate direttamente da Microsoft Store. In alternativa, vengono installati da un percorso host, ad esempio un disco locale, un percorso UNC o un percorso HTTPS. Usare il nodo AppInstallation del provider di servizi di configurazione EnterpriseModernAppManagement per installare le app.

Distribuire app all'utente dallo Store

Per distribuire un'app a un utente direttamente da Microsoft Store, il server di gestione esegue un comando Add ed Exec nel nodo AppInstallation del provider di servizi di configurazione EnterpriseModernAppManagement. Questa funzionalità è supportata solo nel contesto utente e non nel contesto del dispositivo.

Se hai acquistato un'app dallo Store per le aziende e l'app è specificata per una licenza online, l'app e la licenza devono essere acquistate direttamente da Microsoft Store.

Ecco i requisiti per questo scenario:

  • L'app viene assegnata a un utente con identità di Azure Active Directory (Azure AD) nello Store per le aziende. È possibile assegnare direttamente nello Store per le aziende o tramite un server di gestione.
  • Il dispositivo richiede la connettività a Microsoft Store.
  • I servizi di Microsoft Store devono essere abilitati nel dispositivo. L'interfaccia utente per Microsoft Store può essere disabilitata dall'amministratore dell'organizzazione.
  • L'utente deve essere connesso con l'identità di Azure AD.

Ecco alcuni esempi.

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

Di seguito sono riportate le modifiche apportate alla versione precedente:

  1. Il riferimento "{CatID}" deve essere aggiornato a "{ProductID}". Questo valore viene acquisito come parte dello strumento di gestione dello Store per le aziende.

  2. Il valore per i flag può essere "0" o "1"

    Quando si usa "0", lo strumento di gestione richiama la sincronizzazione di Store for Business per assegnare a un utente un posto a sedere di un'applicazione. Quando si usa "1", lo strumento di gestione non richiama la sincronizzazione dello Store per le aziende per assegnare a un utente una sede di un'applicazione. Se disponibile, il CSP otterrà un posto.

  3. skuid è un nuovo parametro obbligatorio. Questo valore viene acquisito come parte della sincronizzazione dello strumento da Store per le aziende a strumento di gestione.

Distribuire una licenza offline a un utente

Se hai acquistato un'app dallo Store per le aziende, la licenza dell'app deve essere distribuita nel dispositivo.

La licenza dell'app deve essere distribuita solo come parte dell'installazione iniziale dell'app. Durante un aggiornamento, solo l'app viene distribuita all'utente.

In SyncML è necessario specificare le informazioni seguenti nel comando Exec:

  • ID licenza: questo ID viene specificato in LocURI. L'ID licenza per la licenza offline viene definito "ID contenuto" nel file di licenza. È possibile recuperare queste informazioni dal download della licenza con codifica Base64 dallo Store per le aziende.
  • Contenuto licenza: questo contenuto viene specificato nella sezione dei dati. Il contenuto della licenza è il BLOB con codifica Base64 della licenza.

Ecco un esempio di installazione di licenze 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>

Distribuire app a un utente da una posizione ospitata

Se hai acquistato un'app dallo Store per le aziende e l'app è specificata per una licenza offline o l'app è un'app non dello Store, l'app deve essere distribuita da una posizione ospitata.

Ecco i requisiti per questo scenario:

  • Il percorso dell'app può essere un sistema di file locale (C:\StagedApps\app1.appx), un percorso UNC (\\server\condivisione\app1.apx) o un percorso HTTPS (https://contoso.com/app1.appx).
  • L'utente deve disporre dell'autorizzazione per accedere al percorso del contenuto. Per i provider di servizi di registrazione hardware, è possibile usare l'autenticazione server o l'autenticazione del certificato usando un certificato associato alla registrazione. I percorsi HTTP sono supportati, ma non consigliati a causa della mancanza di requisiti di autenticazione.
  • Il dispositivo non deve avere connettività a Microsoft Store, ai servizi di archiviazione o all'interfaccia utente di Microsoft Store.
  • L'utente deve essere connesso, ma l'associazione con l'identità di Azure AD non è necessaria.

Nota

È necessario sbloccare il dispositivo per distribuire app non Store oppure distribuire la licenza dell'app prima di distribuire le app offline. Per informazioni dettagliate, vedere Distribuire una licenza offline a un utente.

Il comando Aggiungi per il nome della famiglia di pacchetti è necessario per garantire la corretta rimozione dell'app al momento dell'annullamento della registrazione.

Ecco un esempio di installazione di app line-of-business.

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

Ecco un esempio di installazione di un'app con dipendenze.

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

Ecco un esempio di installazione di un'app con dipendenze e pacchetti facoltativi.

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

Effettuare il provisioning di app per tutti gli utenti di un dispositivo

Il provisioning consente di organizzare l'app nel dispositivo e tutti gli utenti del dispositivo possono avere l'app registrata al successivo account di accesso. Questa funzionalità è supportata solo per l'app acquistata dallo Store per le aziende e l'app viene specificata per una licenza offline oppure l'app non è un'app dello Store. L'app deve essere offerta da una posizione ospitata. L'app viene installata come sistema locale. Per eseguire l'installazione in una condivisione file locale, il "sistema locale" del dispositivo deve avere accesso alla condivisione.

Ecco i requisiti per questo scenario:

  • Il percorso dell'app può essere il sistema di file locali (C:\StagedApps\app1.appx), un percorso UNC (\\server\condivisione\app1.apx) o un percorso HTTPS (https://contoso.com/app1.appx\)
  • L'utente deve disporre dell'autorizzazione per accedere al percorso del contenuto. Per i provider di servizi di registrazione hardware, è possibile usare l'autenticazione server o l'autenticazione del certificato usando un certificato associato alla registrazione. I percorsi HTTP sono supportati, ma non consigliati a causa della mancanza di requisiti di autenticazione.
  • Il dispositivo non deve avere la connettività a Microsoft Store o i servizi dello store abilitati.
  • Il dispositivo non necessita di identità o appartenenza al dominio di Azure AD.
  • Per l'app nonStore, il dispositivo deve essere sbloccato.
  • Per le app offline dello Store, le licenze necessarie devono essere distribuite prima di distribuire le app.

Per effettuare il provisioning dell'app per tutti gli utenti di un dispositivo da una posizione ospitata, il server di gestione esegue un comando Add ed Exec nel nodo AppInstallation nel contesto del dispositivo. Il comando Aggiungi per il nome della famiglia di pacchetti è necessario per garantire la corretta rimozione dell'app al momento dell'annullamento della registrazione.

Nota

Quando si rimuove l'app di cui è stato effettuato il provisioning, l'app non verrà rimossa dagli utenti che hanno già installato l'app.

Ecco un esempio di installazione dell'app.

Nota

Questo è supportato solo in Windows 10 per le edizioni desktop.

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

Il comando HostedInstall Exec contiene un nodo Dati che richiede un xml incorporato. Ecco i requisiti per il codice XML dei dati:

  • Il nodo dell'applicazione ha un parametro obbligatorio, PackageURI, che può essere un percorso di file locale, un percorso UNC o HTTPS.
  • Se necessario, è possibile specificare le dipendenze con il pacchetto. Si tratta di un'operazione facoltativa.

Il parametro DeploymentOptions è disponibile solo nel contesto utente.

Ecco un esempio di installazione dell'app con dipendenze.

Nota

Questo è supportato solo in Windows 10 per le edizioni desktop.

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

Ottenere lo stato delle installazioni delle app

Al termine dell'installazione di un'app, viene inviata una notifica di Windows. È anche possibile eseguire query sullo stato di usando il nodo AppInstallation. Ecco l'elenco di informazioni che è possibile recuperare nella query:

  • Stato: indica lo stato dell'installazione dell'app.

    • NOT_INSTALLED (0): il nodo è stato aggiunto, ma l'esecuzione non è stata completata.
    • INSTALLING (1): l'esecuzione è stata avviata, ma la distribuzione non è stata completata. Se la distribuzione viene completata indipendentemente dall'esito positivo, questo valore viene aggiornato.
    • FAILED (2) - Installazione non riuscita. I dettagli dell'errore sono disponibili in LastError e LastErrorDescription.
    • INSTALLED (3) - Dopo aver completato l'installazione, questo nodo viene pulito. Se l'azione di pulizia non è stata completata, questo stato può essere visualizzato brevemente.
  • LastError: ultimo errore segnalato dal server di distribuzione dell'app.

  • LastErrorDescription: descrive l'ultimo errore segnalato dal server di distribuzione dell'app.

  • Stato: numero intero che indica lo stato di avanzamento dell'installazione dell'app. Nei casi di una posizione HTTPS, questo stato mostra lo stato di avanzamento del download stimato.

    Lo stato non è disponibile per il provisioning e viene usato solo per le installazioni basate sull'utente. Per il provisioning, il valore è sempre 0.

Quando un'app viene installata correttamente, il nodo viene pulito e non è più presente. Lo stato dell'app può essere segnalato nel nodo AppManagement.

Ecco un esempio di query per un'installazione di app specifica.

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

Ecco un esempio di query per tutte le installazioni di app.

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

Avviso per il completamento dell'installazione

Il completamento delle installazioni delle applicazioni può richiedere del tempo. Quindi, vengono eseguite in modo asincrono. Al termine del comando Exec, il client invia una notifica al server di gestione con uno stato, indipendentemente dal fatto che si tratti di un errore o di un esito positivo.

Ecco un esempio di avviso.

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

Per l'installazione basata sull'utente, usare il percorso ./User e per il provisioning delle app usare il percorso ./Device.

Il valore del campo Dati pari a 0 (zero) indica l'esito positivo. In caso contrario, si tratta di un codice di errore. In caso di errore, è possibile ottenere altri dettagli dal nodo AppInstallation.

Nota

Al momento, l'avviso per l'installazione dell'app nello Store non è ancora disponibile.

Disinstallare le app

È possibile disinstallare le app dagli utenti dai dispositivi Windows 10. Per disinstallare un'app, eliminarla dal nodo AppManagement del CSP. All'interno del nodo AppManagement, i pacchetti sono organizzati in base alla loro origine in base ai nodi seguenti:

  • AppStore: queste app sono per Microsoft Store. Le app possono essere installate direttamente dallo Store o recapitate all'azienda dallo Store per le aziende.
  • nonStore: queste app non sono state acquisite da Microsoft Store.
  • Sistema: queste app fanno parte del sistema operativo. Non è possibile disinstallare queste app.

Per disinstallare un'app, eliminarla nel nodo di origine, nel nome della famiglia di pacchetti e nel nome completo del pacchetto. Per disinstallare un XAP, usare l'ID prodotto al posto del nome della famiglia di pacchetti e del nome completo del pacchetto.

Ecco un esempio per disinstallare tutte le versioni di un'app per un utente.

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

Ecco un esempio per disinstallare una versione specifica dell'app per un utente.

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

Rimozione delle app di cui è stato effettuato il provisioning da un dispositivo

È possibile rimuovere le app di cui è stato effettuato il provisioning da un dispositivo per una versione specifica o per tutte le versioni di una famiglia di pacchetti. Quando un'app sottoposta a provisioning viene rimossa, non è disponibile per gli utenti futuri per il dispositivo. Gli utenti connessi che hanno registrato l'app continueranno ad avere accesso all'app. Se si vuole rimuovere l'app per tali utenti, è necessario disinstallare in modo esplicito l'app per tali utenti.

Nota

È possibile rimuovere solo un'app con un valore di inventario IsProvisioned = 1.

La rimozione dell'app di cui è stato effettuato il provisioning si verifica nel contesto del dispositivo.

Ecco un esempio per rimuovere un'app di cui è stato effettuato il provisioning da un 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>

Ecco un esempio per rimuovere una versione specifica di un'app di cui è stato effettuato il provisioning da un 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>

Rimuovere una licenza dell'app dello Store

È possibile rimuovere le licenze dell'app da un dispositivo per app in base all'ID contenuto.

Ecco un esempio per rimuovere una licenza dell'app per un utente.

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

Ecco un esempio per rimuovere una licenza dell'app per un pacchetto di cui è stato effettuato il provisioning (contesto del 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>

Avviso per la disinstallazione dell'app

Il completamento della disinstallazione di un'app può richiedere del tempo. Di conseguenza, la disinstallazione viene eseguita in modo asincrono. Al termine del comando Exec, il client invia una notifica al server di gestione con uno stato, indipendentemente dal fatto che si tratti di un errore o di un esito positivo.

Per la disinstallazione basata sull'utente, usare ./User in LocURI e, per il provisioning, usare ./Device in LocURI.

Ecco un esempio. È disponibile una sola disinstallazione per le app ospitate e archiviate.

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

Aggiorna le tue app

Le app installate in un dispositivo possono essere aggiornate usando il server di gestione. Le app possono essere aggiornate direttamente dallo store o installate da una posizione ospitata.

Aggiornare le app direttamente dallo Store

Per aggiornare un'app da Microsoft Store, il dispositivo richiede il contatto con i servizi dello Store.

Di seguito è riportato un esempio di analisi degli aggiornamenti.

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

Ecco un esempio di controllo dello stato.

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

Aggiornare le app da una posizione ospitata

L'aggiornamento di un'app esistente segue lo stesso processo di un'installazione iniziale. Per altre informazioni, vedere Distribuire app a un utente da una posizione ospitata.

Aggiornare le app di cui è stato effettuato il provisioning

Un'app di cui è stato effettuato il provisioning viene aggiornata automaticamente quando viene inviato un aggiornamento dell'app all'utente. È anche possibile aggiornare un'app di cui è stato effettuato il provisioning usando lo stesso processo di un provisioning iniziale. Per altre informazioni sul provisioning iniziale, vedere Effettuare il provisioning di app per tutti gli utenti di un dispositivo.

Impedisci aggiornamenti automatici dell'app

È possibile impedire l'aggiornamento automatico di app specifiche. Questa funzionalità consente di attivare gli aggiornamenti automatici per le app, con app specifiche escluse come definito dall'amministratore IT.

La disattivazione degli aggiornamenti si applica solo agli aggiornamenti da Microsoft Store a livello di dispositivo. Questa funzionalità non è disponibile a livello di utente. È comunque possibile aggiornare un'app se i pacchetti offline vengono sottoposti a push dal percorso di installazione ospitata.

Ecco un esempio.

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

Altri scenari di gestione delle app

Le sottosezioni seguenti forniscono informazioni su altre configurazioni delle impostazioni.

Abilitare i dati dell'app utente condiviso

L'app di Windows universale può condividere i dati dell'applicazione tra gli utenti del dispositivo. La possibilità di condividere i dati può essere impostata a livello di famiglia di pacchetti o per dispositivo.

Nota

Questa opzione è applicabile solo ai dispositivi con più utenti.

Il criterio AllowSharedUserAppData in Policy CSP consente o disabilita i pacchetti dell'app di condividere i dati tra i pacchetti dell'app quando sono presenti più utenti. Se si abilita questo criterio, le applicazioni possono condividere i dati tra i pacchetti nella famiglia di pacchetti. I dati possono essere condivisi tramite la cartella ShareLocal per la famiglia di pacchetti e il computer locale. Questa cartella è disponibile tramite l'API Windows.Storage.

Se si disabilita questo criterio, le applicazioni non possono condividere i dati dell'applicazione utente tra più utenti. Tuttavia, i dati condivisi prescriti verranno salvati in modo permanente. I dati condivisi predefiniti puliti usano Gestione e manutenzione immagini distribuzione ((/Get-ProvisionedAppxPackage per rilevare se sono presenti dati condivisi) e /Remove-SharedAppxData per rimuoverli.

I valori validi sono 0 (disattivato, valore predefinito) e 1 (attivato).

Ecco un esempio.

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