Verwaltung von Unternehmens-Apps

In diesem Artikel wird eines der wichtigsten Features für die Verwaltung mobiler Geräte (Mobile Device Management, MDM) in Windows 10 behandelt. Es verwaltet den Lebenszyklus von Apps in ganz Windows. Es ist die Möglichkeit, sowohl Store- als auch Nicht-Store-Apps als Teil der nativen MDM-Funktionen zu verwalten. Neu in Windows 10 ist die Möglichkeit, alle Ihre Apps zu inventarisieren.

Ziele der Anwendungsverwaltung

Windows 10 bietet Verwaltungsservern folgende Möglichkeiten:

  • Installieren von Apps direkt aus dem Microsoft Store für Unternehmen
  • Bereitstellen von Offline-Store-Apps und -Lizenzen
  • Bereitstellen von branchenspezifischen Apps (Nicht-Store-Apps)
  • Inventarisieren aller Apps für einen Benutzer (Store- und Nicht-Store-Apps)
  • Inventarisieren aller Apps für ein Gerät (Store- und Nicht-Store-Apps)
  • Deinstallieren aller Apps für einen Benutzer (Store- und Nicht-Store-Apps)
  • Bereitstellen von Apps so, dass sie für alle Benutzer eines Geräts installiert werden, auf dem Windows 10 für Desktopeditionen (Home, Pro, Enterprise und Education) ausgeführt wird
  • Entfernen der bereitgestellten App auf dem Gerät, auf dem Windows 10 für Desktopeditionen ausgeführt wird

Inventarisieren Ihrer Apps

mit Windows 10 können Sie alle Für einen Benutzer bereitgestellten Apps inventarisieren und alle Apps für alle Benutzer eines Geräts auf Windows 10 für Desktopeditionen inventarisieren. Der EnterpriseModernAppManagement-Konfigurationsdienstanbieter (CSP) inventarisiert gepackte Apps und schließt keine herkömmlichen Win32-Apps ein, die über MSI oder ausführbare Dateien installiert werden. Wenn die Apps inventarisiert werden, werden sie basierend auf den folgenden App-Klassifizierungen getrennt:

  • Store: Apps, die aus dem Microsoft Store stammen. Apps können direkt aus dem Store installiert oder mit dem Unternehmen aus dem Store für Unternehmen geliefert werden.
  • nonStore: Apps, die nicht aus dem Microsoft Store erworben wurden.
  • System: Apps, die Teil des Betriebssystems sind. Sie können diese Apps nicht deinstallieren. Diese Klassifizierung ist schreibgeschützt und kann nur inventarisiert werden.

Diese Klassifizierungen werden als Knoten im EnterpriseModernAppManagement-CSP dargestellt.

Die folgenden Informationen zeigen den EnterpriseModernAppManagement-CSP in einem Strukturformat:

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

Jede App zeigt einen Paketfamiliennamen und 1-n vollständige Paketnamen für installierte Apps an. Die Apps werden basierend auf ihrem Ursprung (Store, NonStore, System) kategorisiert.

Die Inventur kann auf jeder Ebene vom Knoten AppManagement über den vollständigen Namen des Pakets rekursiv ausgeführt werden. Der Bestand kann auch nur für ein bestimmtes Bestandsattribute ausgeführt werden.

Der Bestand ist spezifisch für den vollständigen Namen des Pakets und listet gebündelte Pakete und Ressourcenpakete unter dem Paketfamiliennamen auf.

Dies sind die Knoten für jeden vollständigen Paketnamen:

  • Name
  • Version
  • Herausgeber
  • Architecture
  • Installlocation
  • IsFramework
  • IsBundle
  • InstallDate
  • Resourceid
  • RequiresReinstallieren
  • PackageStatus
  • Users
  • IsProvisioned

Ausführliche Beschreibungen der einzelnen Knoten finden Sie unter EnterpriseModernAppManagement CSP.

App-Bestand

Sie können den EnterpriseModernAppManagement-CSP verwenden, um alle Apps abzufragen, die für einen Benutzer oder ein Gerät installiert sind. Die Abfrage gibt alle Apps zurück, auch wenn sie mithilfe von MDM oder anderen Methoden installiert wurden. Die Inventur kann auf Benutzer- oder Geräteebene ausgeführt werden. Der Bestand auf Geräteebene gibt Informationen für alle Benutzer auf dem Gerät zurück.

Eine vollständige Bestandsaufnahme eines Geräts kann basierend auf der Hardware und der Anzahl der installierten Apps ressourcenintensiv sein. Die zurückgegebenen Daten können auch groß sein. Sie können diese Anforderungen aufteilen, um die Auswirkungen auf Clients und Netzwerkdatenverkehr zu verringern.

Hier sehen Sie ein Beispiel für eine Abfrage für alle Apps auf dem Gerät.

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

Hier sehen Sie ein Beispiel für eine Abfrage für eine bestimmte App für einen Benutzer.

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

Speichern des Lizenzbestands

Sie können den EnterpriseModernAppManagement-CSP verwenden, um alle App-Lizenzen abzufragen, die für einen Benutzer oder ein Gerät installiert sind. Die Abfrage gibt alle App-Lizenzen zurück, das Ereignis, wenn sie über MDM oder andere Methoden installiert wurden. Die Inventur kann auf Benutzer- oder Geräteebene ausgeführt werden. Der Bestand auf Geräteebene gibt Informationen für alle Benutzer auf dem Gerät zurück.

Dies sind die Knoten für jede Lizenz-ID:

  • LicenseCategory
  • LicenseUsage
  • RequestedID

Ausführliche Beschreibungen der einzelnen Knoten finden Sie unter EnterpriseModernAppManagement CSP.

Hinweis

Die LicenseID im CSP ist die Inhalts-ID für die Lizenz.

Hier sehen Sie ein Beispiel für eine Abfrage für alle App-Lizenzen auf einem Gerät.

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

Hier sehen Sie ein Beispiel für eine Abfrage für alle App-Lizenzen für einen Benutzer.

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

Aktivieren des Geräts für die Installation von Nicht-Store-Apps

Es gibt zwei grundlegende Arten von Apps, die Sie bereitstellen können: Store-Apps und unternehmenssignierte Apps. Um vom Unternehmen signierte Apps bereitzustellen, müssen Sie eine Einstellung auf dem Gerät aktivieren, um vertrauenswürdige Apps zuzulassen. Die Apps können von einem von Microsoft genehmigten Stamm (z. B. Symantec), einem vom Unternehmen bereitgestellten Stamm oder selbstsignierten Apps signiert werden. In diesem Abschnitt werden die Schritte zum Konfigurieren des Geräts für die Bereitstellung von Apps außerhalb des Stores beschrieben.

Entsperren des Geräts für Nicht-Store-Apps

Um Apps bereitzustellen, die nicht aus dem Microsoft Store stammen, müssen Sie die Richtlinie ApplicationManagement/AllowAllTrustedApps konfigurieren. Diese Richtlinie ermöglicht die Installation von Nicht-Store-Apps auf dem Gerät, wenn eine Kette zu einem Zertifikat auf dem Gerät vorhanden ist. Die App kann mit einem Stammzertifikat auf dem Gerät (z. B. Symantec Enterprise), einem Unternehmensstammzertifikat oder einem auf dem Gerät bereitgestellten Peervertrauenszertifikat signiert werden. Weitere Informationen zum Bereitstellen einer Benutzerlizenz finden Sie unter Bereitstellen einer Offlinelizenz für einen Benutzer.

Die AllowAllTrustedApps-Richtlinie aktiviert die Installations-Apps, denen ein Zertifikat im vertrauenswürdigen Personen auf dem Gerät oder ein Stammzertifikat im vertrauenswürdigen Stamm des Geräts als vertrauenswürdig eingestuft wird. Die Richtlinie ist nicht standardmäßig konfiguriert, was bedeutet, dass nur Apps aus dem Microsoft Store installiert werden können. Wenn der Verwaltungsserver den Wert implizit auf Off festlegt, wird die Einstellung im Einstellungsbereich auf dem Gerät deaktiviert.

Weitere Informationen zur AllowAllTrustedApps-Richtlinie finden Sie unter Richtlinien-CSP.

Beispiele:

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

Entsperren des Geräts für den Entwicklermodus

Für die Entwicklung von Apps auf Windows 10 ist keine spezielle Lizenz mehr erforderlich. Sie können das Debuggen und die Bereitstellung von nicht gepackten Apps mithilfe der Richtlinie ApplicationManagement/AllowDeveloperUnlock im Richtlinien-CSP aktivieren.

Die AllowDeveloperUnlock-Richtlinie aktiviert den Entwicklungsmodus auf dem Gerät. AllowDeveloperUnlock ist standardmäßig nicht konfiguriert, was bedeutet, dass nur Microsoft Store-Apps installiert werden können. Wenn der Verwaltungsserver den Wert explizit auf Off festlegt, wird die Einstellung im Einstellungsbereich auf dem Gerät deaktiviert.

Die Bereitstellung von Apps in Windows 10 für Desktopeditionen erfordert, dass eine Kette zu einem Zertifikat auf dem Gerät vorhanden ist. Die App kann mit einem Stammzertifikat auf dem Gerät (z. B. Symantec Enterprise), einem Unternehmensstammzertifikat oder einem auf dem Gerät bereitgestellten Peervertrauenszertifikat signiert werden.

Weitere Informationen zur Richtlinie AllowDeveloperUnlock finden Sie unter Richtlinien-CSP.

Beispiel:

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

Installieren Ihrer Apps

Sie können Apps für einen bestimmten Benutzer oder für alle Benutzer eines Geräts installieren. Apps werden direkt aus dem Microsoft Store installiert. Oder sie werden von einem Hostspeicherort wie einem lokalen Datenträger, unc-Pfad oder HTTPS-Speicherort installiert. Verwenden Sie den Knoten AppInstallation des EnterpriseModernAppManagement-CSP , um Apps zu installieren.

Bereitstellen von Apps für Benutzer aus dem Store

Um eine App direkt aus dem Microsoft Store für einen Benutzer bereitzustellen, führt der Verwaltungsserver den Befehl Add and Exec auf dem Knoten AppInstallation des EnterpriseModernAppManagement-CSP aus. Dieses Feature wird nur im Benutzerkontext und nicht im Gerätekontext unterstützt.

Wenn Sie eine App im Store für Unternehmen erworben haben und die App für eine Onlinelizenz angegeben ist, müssen die App und die Lizenz direkt aus dem Microsoft Store erworben werden.

Dies sind die Anforderungen für dieses Szenario:

  • Die App wird einer Azure Active Directory-Benutzeridentität (Azure AD) im Store für Unternehmen zugewiesen. Sie können die Zuweisung direkt im Store für Unternehmen oder über einen Verwaltungsserver durchführen.
  • Das Gerät erfordert eine Verbindung mit dem Microsoft Store.
  • Microsoft Store-Dienste müssen auf dem Gerät aktiviert sein. Die Benutzeroberfläche für den Microsoft Store kann vom Unternehmensadministrator deaktiviert werden.
  • Der Benutzer muss mit seiner Azure AD-Identität angemeldet sein.

Beispiele:

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

Dies sind die Änderungen gegenüber der vorherigen Version:

  1. Der Verweis "{CatID}" sollte auf "{ProductID}" aktualisiert werden. Dieser Wert wird als Teil des Store for Business-Verwaltungstools abgerufen.

  2. Der Wert für Flags kann "0" oder "1" sein.

    Bei Verwendung von "0" ruft das Verwaltungstool an die Store für Unternehmen-Synchronisierung zurück, um einem Benutzer einen Sitz einer Anwendung zuzuweisen. Bei Verwendung von "1" ruft das Verwaltungstool nicht an die Store für Unternehmen-Synchronisierung zurück, um einem Benutzer einen Arbeitsplatz einer Anwendung zuzuweisen. Der CSP beansprucht einen Platz, sofern dieser verfügbar ist.

  3. Ist skuid ein neuer Parameter, der erforderlich ist. Dieser Wert wird als Teil der Synchronisierung des Tools Store für Unternehmen mit dem Verwaltungstool abgerufen.

Bereitstellen einer Offlinelizenz für einen Benutzer

Wenn Sie eine App im Store für Unternehmen erworben haben, muss die App-Lizenz auf dem Gerät bereitgestellt werden.

Die App-Lizenz muss nur im Rahmen der Erstinstallation der App bereitgestellt werden. Während eines Updates wird nur die App für den Benutzer bereitgestellt.

In SyncML müssen Sie die folgenden Informationen im Exec-Befehl angeben:

  • Lizenz-ID: Diese ID wird im LocURI angegeben. Die Lizenz-ID für die Offlinelizenz wird in der Lizenzdatei als "Inhalts-ID" bezeichnet. Sie können diese Informationen aus dem Base64-codierten Lizenzdownload aus dem Store für Unternehmen abrufen.
  • Lizenzinhalt: Dieser Inhalt wird im Datenabschnitt angegeben. Der Lizenzinhalt ist das Base64-codierte Blob der Lizenz.

Hier sehen Sie ein Beispiel für eine Offlinelizenzinstallation.

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

Bereitstellen von Apps für einen Benutzer von einem gehosteten Standort aus

Wenn Sie eine App im Store für Unternehmen erworben haben und die App für eine Offlinelizenz angegeben ist oder es sich bei der App um eine Nicht-Store-App handelt, muss die App von einem gehosteten Speicherort bereitgestellt werden.

Dies sind die Anforderungen für dieses Szenario:

  • Der Speicherort der App kann ein lokales Dateisystem (C:\StagedApps\app1.appx), ein UNC-Pfad (\\server\share\app1.apx) oder ein HTTPS-Speicherort (https://contoso.com/app1.appx) sein.
  • Der Benutzer muss über die Berechtigung für den Zugriff auf den Inhaltsspeicherort verfügen. Für HTTPs können Sie die Serverauthentifizierung oder die Zertifikatauthentifizierung mithilfe eines Zertifikats verwenden, das der Registrierung zugeordnet ist. HTTP-Speicherorte werden unterstützt, aber aufgrund fehlender Authentifizierungsanforderungen nicht empfohlen.
  • Das Gerät muss keine Verbindung mit dem Microsoft Store, den Store-Diensten haben oder die Microsoft Store-Benutzeroberfläche aktiviert sein.
  • Der Benutzer muss angemeldet sein, eine Zuordnung mit der Azure AD-Identität ist jedoch nicht erforderlich.

Hinweis

Sie müssen das Gerät entsperren, um NichtStore-Apps bereitzustellen, oder Sie müssen die App-Lizenz bereitstellen, bevor Sie die Offline-Apps bereitstellen. Weitere Informationen finden Sie unter Bereitstellen einer Offlinelizenz für einen Benutzer.

Der Befehl Hinzufügen für den Paketfamiliennamen ist erforderlich, um sicherzustellen, dass die App beim Aufheben der Registrierung ordnungsgemäß entfernt wird.

Hier sehen Sie ein Beispiel für eine Branchen-App-Installation.

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

Hier sehen Sie ein Beispiel für eine App-Installation mit Abhängigkeiten.

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

Hier sehen Sie ein Beispiel für eine App-Installation mit Abhängigkeiten und optionalen Paketen.

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

Bereitstellen von Apps für alle Benutzer eines Geräts

Mit der Bereitstellung können Sie die App auf dem Gerät bereitstellen, und alle Benutzer des Geräts können die App bei ihrer nächsten Anmeldung registrieren lassen. Dieses Feature wird nur für Apps unterstützt, die im Store für Unternehmen erworben wurden, und die App wird für eine Offlinelizenz angegeben, oder die App ist eine Nicht-Store-App. Die App muss von einem gehosteten Standort aus angeboten werden. Die App wird als lokales System installiert. Zum Installieren auf einer lokalen Dateifreigabe muss das "lokale System" des Geräts Zugriff auf die Freigabe haben.

Dies sind die Anforderungen für dieses Szenario:

  • Der Speicherort der App kann das lokale Dateisystem (C:\StagedApps\app1.appx), ein UNC-Pfad (\\server\share\app1.apx) oder ein HTTPS-Speicherort (https://contoso.com/app1.appx\) sein.
  • Der Benutzer muss über die Berechtigung für den Zugriff auf den Inhaltsspeicherort verfügen. Für HTTPs können Sie die Serverauthentifizierung oder die Zertifikatauthentifizierung mithilfe eines Zertifikats verwenden, das der Registrierung zugeordnet ist. HTTP-Speicherorte werden unterstützt, aber aufgrund fehlender Authentifizierungsanforderungen nicht empfohlen.
  • Für das Gerät muss keine Verbindung mit dem Microsoft Store oder aktivierten Store-Diensten vorhanden sein.
  • Das Gerät benötigt keine Azure AD-Identität oder Domänenmitgliedschaft.
  • Bei nicht Store-Apps muss Ihr Gerät entsperrt sein.
  • Für Store-Offline-Apps müssen vor der Bereitstellung der Apps die erforderlichen Lizenzen bereitgestellt werden.

Um die App für alle Benutzer eines Geräts von einem gehosteten Standort aus bereitzustellen, führt der Verwaltungsserver den Befehl Add and Exec auf dem Knoten AppInstallation im Gerätekontext aus. Der Befehl Hinzufügen für den Paketfamiliennamen ist erforderlich, um sicherzustellen, dass die App beim Aufheben der Registrierung ordnungsgemäß entfernt wird.

Hinweis

Wenn Sie die bereitgestellte App entfernen, wird sie nicht von den Benutzern entfernt, die die App bereits installiert haben.

Hier sehen Sie ein Beispiel für die App-Installation.

Hinweis

Dies wird nur in Windows 10 für Desktopeditionen unterstützt.

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

Der Befehl HostedInstall Exec enthält einen Datenknoten, der ein eingebettetes XML erfordert. Dies sind die Anforderungen für die Daten-XML:

  • Der Anwendungsknoten verfügt über den erforderlichen Parameter PackageURI, bei dem es sich um einen lokalen Dateispeicherort, unc- oder HTTPS-Speicherort handeln kann.
  • Abhängigkeiten können angegeben werden, wenn die Installation mit dem Paket erforderlich ist. Dies ist optional.

Der Parameter DeploymentOptions ist nur im Benutzerkontext verfügbar.

Hier sehen Sie ein Beispiel für die App-Installation mit Abhängigkeiten.

Hinweis

Dies wird nur in Windows 10 für Desktopeditionen unterstützt.

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

Abrufen des Status von App-Installationen

Wenn eine App-Installation abgeschlossen ist, wird eine Windows-Benachrichtigung gesendet. Sie können auch den Status von mithilfe des Knotens AppInstallation abfragen. Dies ist die Liste der Informationen, die Sie in der Abfrage abrufen können:

  • Status: Gibt den Status der App-Installation an.

    • NOT_INSTALLED (0): Der Knoten wurde hinzugefügt, aber die Ausführung wurde nicht abgeschlossen.
    • INSTALLING (1): Die Ausführung wurde gestartet, die Bereitstellung wurde jedoch noch nicht abgeschlossen. Wenn die Bereitstellung unabhängig vom Erfolg abgeschlossen wird, wird dieser Wert aktualisiert.
    • FAILED (2): Fehler bei der Installation. Die Details des Fehlers finden Sie unter LastError und LastErrorDescription.
    • INSTALLIERT (3): Sobald eine Installation erfolgreich war, wird dieser Knoten bereinigt. Wenn die Bereinigungsaktion nicht abgeschlossen wurde, wird dieser Zustand möglicherweise kurz angezeigt.
  • LastError: Der letzte vom App-Bereitstellungsserver gemeldete Fehler.

  • LastErrorDescription: Beschreibt den letzten Fehler, der vom App-Bereitstellungsserver gemeldet wurde.

  • Status: Eine ganze Zahl, die den Fortschritt der App-Installation angibt. In Fällen eines HTTPS-Speicherorts zeigt dieser Status den geschätzten Downloadfortschritt an.

    Der Status ist für die Bereitstellung nicht verfügbar und wird nur für benutzerbasierte Installationen verwendet. Für die Bereitstellung ist der Wert immer 0.

Wenn eine App erfolgreich installiert wurde, wird der Knoten bereinigt und nicht mehr vorhanden. Der Status der App kann unter dem Knoten AppManagement gemeldet werden.

Hier sehen Sie ein Beispiel für eine Abfrage für eine bestimmte App-Installation.

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

Hier sehen Sie ein Beispiel für eine Abfrage für alle App-Installationen.

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

Warnung zum Abschluss der Installation

Anwendungsinstallationen können einige Zeit in Anspruch nehmen. Sie werden also asynchron ausgeführt. Wenn der Exec-Befehl abgeschlossen ist, sendet der Client eine Benachrichtigung mit einem Status an den Verwaltungsserver, unabhängig davon, ob es sich um einen Fehler oder erfolg handelt.

Hier sehen Sie ein Beispiel für eine Warnung.

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

Verwenden Sie für die benutzerbasierte Installation den Pfad ./User, und verwenden Sie für die Bereitstellung von Apps den ./Device-Pfad.

Der Wert des Datenfelds 0 (null) gibt den Erfolg an. Andernfalls handelt es sich um einen Fehlercode. Wenn ein Fehler auftritt, können Sie weitere Details vom Knoten AppInstallation abrufen.

Hinweis

Derzeit ist die Warnung für die Installation der Store-App noch nicht verfügbar.

Deinstallieren Ihrer Apps

Sie können Apps von Benutzern von Windows 10 Geräten deinstallieren. Um eine App zu deinstallieren, löschen Sie sie aus dem Knoten AppManagement des CSP. Innerhalb des Knotens AppManagement werden Pakete basierend auf ihrem Ursprung gemäß den folgenden Knoten organisiert:

  • AppStore: Diese Apps sind für den Microsoft Store. Apps können direkt aus dem Store installiert oder aus dem Store für Unternehmen an das Unternehmen übermittelt werden.
  • nonStore: Diese Apps, die nicht aus dem Microsoft Store erworben wurden.
  • System: Diese Apps sind Teil des Betriebssystems. Sie können diese Apps nicht deinstallieren.

Um eine App zu deinstallieren, löschen Sie sie unter dem Ursprungsknoten, dem Paketfamiliennamen und dem vollständigen Paketnamen. Verwenden Sie zum Deinstallieren eines XAP die Produkt-ID anstelle des Paketfamiliennamens und des vollständigen Paketnamens.

Hier sehen Sie ein Beispiel für die Deinstallation aller Versionen einer App für einen Benutzer.

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

Hier sehen Sie ein Beispiel für die Deinstallation einer bestimmten Version der App für einen Benutzer.

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

Bereitgestellte Apps von einem Gerät entfernt

Sie können bereitgestellte Apps für eine bestimmte Version oder für alle Versionen einer Paketfamilie von einem Gerät entfernen. Wenn eine bereitgestellte App entfernt wird, steht sie zukünftigen Benutzern für das Gerät nicht zur Verfügung. Angemeldete Benutzer, für die die App registriert ist, haben weiterhin Zugriff auf die App. Wenn Sie die App für diese Benutzer entfernen möchten, müssen Sie die App für diese Benutzer explizit deinstallieren.

Hinweis

Sie können nur eine App entfernen, die den Inventurwert IsProvisioned = 1 aufweist.

Das Entfernen der bereitgestellten App erfolgt im Gerätekontext.

Hier ist ein Beispiel für das Entfernen einer bereitgestellten App von einem Gerät.

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

Hier ist ein Beispiel für das Entfernen einer bestimmten Version einer bereitgestellten App von einem Gerät:

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

Entfernen einer Store-App-Lizenz

Sie können App-Lizenzen von einem Gerät pro App basierend auf der Inhalts-ID entfernen.

Hier sehen Sie ein Beispiel für das Entfernen einer App-Lizenz für einen Benutzer.

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

Hier sehen Sie ein Beispiel für das Entfernen einer App-Lizenz für ein bereitgestelltes Paket (Gerätekontext).

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

Warnung für die Deinstallation der App

Die Deinstallation einer App kann einige Zeit in Anspruch nehmen. Daher wird die Deinstallation asynchron ausgeführt. Wenn der Exec-Befehl abgeschlossen ist, sendet der Client eine Benachrichtigung mit einem Status an den Verwaltungsserver, unabhängig davon, ob es sich um einen Fehler oder erfolg handelt.

Verwenden Sie für die benutzerbasierte Deinstallation ./User im LocURI und für die Bereitstellung ./Device im LocURI.

Beispiel: Es gibt nur eine Deinstallation für gehostete und Store-Apps.

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

Aktualisieren Sie Ihre Apps

Auf einem Gerät installierte Apps können mithilfe des Verwaltungsservers aktualisiert werden. Apps können direkt aus dem Store aktualisiert oder von einem gehosteten Speicherort aus installiert werden.

Aktualisieren von Apps direkt aus dem Store

Um eine App aus dem Microsoft Store zu aktualisieren, muss das Gerät kontakt mit den Store-Diensten kontaktieren.

Hier sehen Sie ein Beispiel für eine Updateüberprüfung.

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

Hier sehen Sie ein Beispiel für eine Statusprüfung.

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

Aktualisieren von Apps von einem gehosteten Speicherort aus

Beim Aktualisieren einer vorhandenen App wird derselbe Prozess wie bei der Erstinstallation ausgeführt. Weitere Informationen finden Sie unter Bereitstellen von Apps für einen Benutzer von einem gehosteten Speicherort aus.

Aktualisieren von bereitgestellten Apps

Eine bereitgestellte App wird automatisch aktualisiert, wenn ein App-Update an den Benutzer gesendet wird. Sie können eine bereitgestellte App auch mithilfe desselben Prozesses wie bei der ersten Bereitstellung aktualisieren. Weitere Informationen zur ersten Bereitstellung finden Sie unter Bereitstellen von Apps für alle Benutzer eines Geräts.

Verhindern von automatischen Updates für die App

Sie können verhindern, dass bestimmte Apps automatisch aktualisiert werden. Mit diesem Feature können Sie automatische Updates für Apps aktivieren, wobei bestimmte Apps ausgeschlossen werden, wie vom IT-Administrator definiert.

Das Deaktivieren von Updates gilt nur für Updates aus dem Microsoft Store auf Geräteebene. Dieses Feature ist auf Benutzerebene nicht verfügbar. Sie können eine App weiterhin aktualisieren, wenn die Offlinepakete vom gehosteten Installationsspeicherort gepusht werden.

Beispiel:

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

Weitere Szenarien für die App-Verwaltung

Die folgenden Unterabschnitte enthalten Informationen zu weiteren Einstellungskonfigurationen.

Aktivieren freigegebener Benutzer-App-Daten

Die universelle Windows-App kann Anwendungsdaten für die Benutzer des Geräts freigeben. Die Möglichkeit zum Freigeben von Daten kann auf Paketfamilienebene oder pro Gerät festgelegt werden.

Hinweis

Dies gilt nur für Geräte mit mehreren Benutzern.

Die AllowSharedUserAppData-Richtlinie im Richtlinien-CSP aktiviert oder deaktiviert App-Pakete, um Daten zwischen App-Paketen freizugeben, wenn mehrere Benutzer vorhanden sind. Wenn Sie diese Richtlinie aktivieren, können Anwendungen Daten zwischen Paketen in ihrer Paketfamilie freigeben. Daten können über den Ordner "ShareLocal" für diese Paketfamilie und den lokalen Computer freigegeben werden. Dieser Ordner ist über die Windows.Storage-API verfügbar.

Wenn Sie diese Richtlinie deaktivieren, können Anwendungen keine Benutzeranwendungsdaten für mehrere Benutzer freigeben. Vorab geschriebene freigegebene Daten bleiben jedoch erhalten. Verwenden Sie DISM (/Get-ProvisionedAppxPackage), um zu ermitteln, ob freigegebene Daten vorhanden sind, und /Remove-SharedAppxData, um sie zu entfernen.

Die gültigen Werte sind 0 (aus, Standardwert) und 1 (ein).

Beispiel:

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