Lab 1b: Hinzufügen einer App zu Ihrem Image

Wir werden jetzt eine App (z. B. die IoT Core Default-App) packen und ein neues Windows IoT Core-Image erstellen, das Sie auf Ihr Gerät laden können.

Hinweis

Dieser Prozess ist für Hintergrund- und Vordergrund-Apps identisch. Der einzige bemerkenswerte Unterschied besteht darin, dass nur eine App im Vordergrund als Start-App ausgewählt werden kann und alle anderen installierten Apps als Hintergrund-Apps ausgeführt werden.

Voraussetzungen/Anforderungen

Hinweis

Im Verlauf dieses Fertigungsleitfadens wird ProjectA allmählich dem Image SampleA ähneln, das sich in C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA befindet.

Wir verwenden das ProjectA-Image, das wir in Lab 1a: Erstellen eines Basisimages erstellt haben.

Sie benötigen auch die folgenden Tools, um diesen Abschnitt abzuschließen:

  • Visual Studio
  • Windows Assessment and Deployment Kit (Windows ADK)
  • Windows 10 IoT Core-Pakete
  • IoT Core ADK-Add-Ons
  • IoT Core-PowerShell-Umgebung
  • Texteditor wie Editor oder VS-Code

Unterstützte Anwendungstypen

Universelle Windows-Plattform-Apps (UWP)

IoT Core ist ein UWP-zentriertes Betriebssystem, und UWP-Apps sind der primäre App-Typ.

Universal Windows Platform (UWP) ist eine allgemeine App-Plattform für alle Versionen von Windows 10, einschließlich Windows 10 IoT Core. UWP ist eine Weiterentwicklung von Windows Runtime (WinRT). Weitere Informationen und eine Übersicht zu UWP finden Sie hier.

Herkömmliche UWP-Apps

UWP-Apps funktionieren nur unter IoT Core, genau wie in anderen Windows 10 Editionen. Eine einfache, leere XAML-App in Visual Studio wird ordnungsgemäß auf Ihrem IoT Core-Gerät bereitgestellt, genau wie auf einem Smartphone oder einem Windows 10 PC. Alle UWP-Standardsprachen und -Projektvorlagen werden in IoT Core vollständig unterstützt.

Es gibt einige Ergänzungen zum herkömmlichen UWP-App-Modell zur Unterstützung von IoT-Szenarien, und jede UWP-App, die sie nutzt, benötigt die entsprechenden Informationen, die ihrem Manifest hinzugefügt werden. Insbesondere muss der Namespace „iot“ dem Manifest dieser Standard-UWP-Apps hinzugefügt werden.

Im Attribut des Manifests müssen Sie die iot xmlns definieren und der IgnorableNamespaces-Liste hinzufügen. Die endgültige Datei sollte wie folgt aussehen:

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

Hintergrund-Apps

Neben den herkömmlichen UI-Apps wurde in IoT Core ein neuer UWP-App-Typ namens „Hintergrundanwendungen“ hinzugefügt. Diese Anwendungen besitzen keine UI-Komponente, sondern eine Klasse, die die Schnittstelle „IBackgroundTask“ implementiert. Anschließend registrieren sie diese Klasse als „StartupTask“, die beim Systemstart ausgeführt werden soll. Da es sich immer noch um UWP-Apps handelt, haben sie Zugriff auf den gleichen Satz von APIs und werden von derselben Sprache unterstützt. Der einzige Unterschied besteht darin, dass es keinen Benutzeroberflächen-Einstiegspunkt gibt.

Jeder Typ von IBackgroundTask erhält seine eigene Ressourcenrichtlinie. Diese ist in der Regel restriktiv, um die Akkulaufzeit und die Computerressourcen auf Geräten zu verbessern, auf denen diese Hintergrund-Apps sekundäre Komponenten von Vordergrund-UI-Apps sind. Bei IoT-Geräten sind Hintergrund-Apps häufig die primäre Funktion des Geräts. Daher erhalten diese StartupTasks eine Ressourcenrichtlinie, die Vordergrund-UI-Apps auf anderen Geräten spiegelt.

Ausführliche Informationen zu Hintergrund-Apps finden Sie auf MSDN.

Nicht-UWP-Apps (Win32)

IoT Core unterstützt bestimmte herkömmliche Win32-App-Typen wie Win32-Konsolen-Apps und NT-Dienste. Diese Apps werden auf die gleiche Weise erstellt und ausgeführt wie auf Windows 10 Desktop. Darüber hinaus gibt es eine IoT Core C++-Konsolenprojektvorlage, um das Erstellen solcher Apps mithilfe von Visual Studio zu erleichtern.

Für diese Nicht-UWP-Anwendungen gelten zwei Haupteinschränkungen:

  1. Keine Unterstützung der Win32-Legacybenutzeroberfläche: IoT Core enthält keine APIs zum Erstellen von klassischen (HWND) Windows-Handles. Legacymethoden wie CreateWindow() und CreateWindowEx() oder andere Methoden, die mit Windows-Handles (HWNDs) arbeiten, sind nicht verfügbar. Folglich werden Frameworks, die von solchen APIs abhängig sind, einschließlich MFC, Windows Forms und WPF, in IoT Core nicht unterstützt.
  2. Nur C++-Apps: Derzeit wird nur C++ für die Entwicklung von Win32-Apps in IoT Core unterstützt.

App Service

App-Dienste sind UWP-Apps, die Dienste für andere UWP-Apps bereitstellen. Sie entsprechen Webdiensten auf einem Gerät. Ein App-Dienst wird als Hintergrundaufgabe in der Host-App ausgeführt und kann seine Dienste auch anderen Apps bereitstellen. Beispielsweise kann der Barcode-Scanner eines App-Dienstes auch anderen Apps nützlich sein. Mit App-Diensten können Sie Dienste ohne Benutzeroberfläche erstellen, die Apps auf demselben Gerät und ab Windows 10, Version 1607, auch auf Remotegeräten aufrufen können. Ab Windows 10, Version 1607, können Sie App-Dienste erstellen, die im gleichen Prozess wie die Vordergrund-App ausgeführt werden.

Weitere Informationen zum Erstellen eines Hintergrund-App-Diensts sowie zum Abrufen des Diensts von UWP-Apps (sowie Hintergrundaufgaben/Dienste) finden Sie hier.

Erweitern der App mit Diensten, Erweiterungen und Paketen

Es gibt viele Technologien in Windows 10, mit denen Sie Ihre App erweitern und in Komponenten aufgliedern können. Anhand dieser Tabelle können Sie bestimmen, welche Technologie Sie je nach Anforderungen verwenden sollten. Anschließend folgt eine kurze Beschreibung der Szenarien und Technologien.

Szenario Ressourcenpaket Objektpaket Optionale Pakete Einfaches Bundle App-Erweiterung App Service Streaming-Installation
Code-Plug-Ins von Drittanbietern ✔️
Prozessinterne Code-Plug-Ins ✔️
UX-Objekte (Zeichenfolgen/Bilder) ✔️ ✔️ ✔️ ✔️ ✔️
On-Demand-Inhalt
(z. B. zusätzliche Ebenen)
✔️ ✔️ ✔️
Separate Lizenzierung und Erwerb ✔️ ✔️ ✔️
App-interner Erwerb ✔️ ✔️
Optimieren der Installationszeit ✔️ ✔️ ✔️ ✔️
Reduzieren des Datenträgerbedarfs ✔️ ✔️
Optimieren der Paketierung ✔️ ✔️ ✔️
Reduzieren der Veröffentlichungszeit ✔️ ✔️ ✔️ ✔️

Erstellen eines Appx-Pakets

Der erste Schritt besteht im Erstellen einer UWP-Anwendung (Universal Windows Platform), die auf dem IoT-Gerät ausgeführt wird. Sie können diesen Abschnitt überspringen, wenn Sie Ihre UWP-Anwendung bereits erstellt und getestet haben.

  1. Erstellen Sie eine UWP-App. Dabei kann es sich um eine beliebige App handeln, die für IoT Core entwickelt und als Appx-Paket gespeichert worden ist. Für unser Beispiel verwenden wir die IoT Core Default-App.

  2. Speichern Sie Ihre Anwendung in Visual Studio als Appx-Paket. Klicken Sie dazu auf Projekt > Store > App-Pakete erstellen>Ich möchte Pakete für das Querladen erstellen > Weiter.

  3. Wählen Sie als Ausgabespeicherort den Pfad „C:\DefaultApp“ (oder einen anderen Pfad, der keine Leerzeichen enthält) aus.

  4. Wählen Sie App-Bundle erstellen: Nie

  5. Klicken Sie auf Erstellen.

Screenshot des Fensters mit App-Paketen

Visual Studio erstellt die Appx-Dateien an den von Ihnen angegebenen Speicherort für die von Ihnen ausgewählte Architektur (Arm, x86, x64). In unserem Beispiel heißt diese Datei: C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test

  1. Optional: Testen Sie die App. Beachten Sie, dass die App möglicherweise bereits beim Erstellen des Projekts getestet worden ist.

Packen der Appx

Der nächste Schritt besteht im Packen der Appx-Datei, wobei Sie diese anpassen und mit dem Windows ADK erstellen können (wenn Sie das FFU-Image erstellen).

  1. Öffnen Sie IoTCorePShell.cmd. Sie sollten aufgefordert werden, die App als Administrator auszuführen.

  2. Erstellen Sie mithilfe von New-IoTAppxPackage das Paket für Ihre Appx. Ersetzen Sie den Dateipfadspeicherort und den Paketnamen durch Ihr Appx-Paket. In unserem Beispiel lautet der Befehl wie folgt:

    Add-IoTAppxPackage "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
    
    (or) newappxpkg "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
    

    Hinweis

    Der fga-Parameter gibt an, dass es sich bei der Appx-Datei um eine Vordergrundanwendung handelt. Wenn Sie Ihr Paket als Hintergrundanwendung (mit dem bga-Parameter) angeben und keine anderen Vordergrundanwendungen im Image vorhanden sind, bleibt das System beim Starten hängen (zeigt endlos einen Wartekreisel an).

    Damit wird ein neuer Ordner in C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp erstellt, die Appx-Dateien und deren Abhängigkeiten werden kopiert, und es werden die Datei „customizations.xml“ sowie eine Paket-XML-Datei, die zum Erstellen des Pakets verwendet wird, erstellt.

    Wenn Ihr Appx Abhängigkeiten hat, muss sich das Unterverzeichnis „Dependencies“ am selben Speicherort wie Ihre Appx befinden, wenn Sie diesen Befehl ausführen. Wenn dies nicht der Fall ist, führt dies zu Fehlern beim Erstellen des FFU-Images.

    Dadurch wird auch die FeatureID APPX_MYUWPAPP der C:\MyWorkspace\Source-<arch>\Packages\OEMFM.xml-Datei hinzugefügt.

  3. In der IoT Core Shell-Umgebung können Sie jetzt mit New-IoTCabPackage das Paket in einer CAB Datei erstellen.

    New-IoTCabPackage Appx.MyUWPApp
    (or) buildpkg Appx.MyUWPApp
    

    Daraufhin wird das Paket in einer CAB Datei unter C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab erstellt.

Aktualisieren der Konfigurationsdateien des Projekts

Sie können jetzt Ihre Projektkonfigurationsdateien aktualisieren, um die App in das FFU-Image einzuschließen.

  1. Fügen Sie die FeatureID für unser App-Paket mit Add-IoTProductFeature hinzu:

    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    (or) addfid ProductA Test APPX_MYUWPAPP -OEM
    

    Damit wird eine FeatureID namens APPX_HELLOWORLDAPP zur Test OEMInput XML-Datei (C:\IoT\Workspaces\ContosoWS\Source-arm\<product name>\TestOEMInput.xml-Datei) des angegebenen Produkts hinzugefügt.

  2. Entfernen Sie die Beispieltest-Apps IOT_BERTHA mithilfe von Remove-IoTProductFeature.

    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    (or) removefid ProductA Test IOT_BERTHA
    

Erstellen und Testen des Images

Bereiten Sie Ihre Umgebung in der IoT Core PowerShell-Umgebung für die Erstellung von Produkten vor, indem Sie alle Pakete (mit New-IoTCabPackage) in den Arbeitsordnern erstellen:

New-IoTCabPackage All
(or) buildpkg all

Erstellen Sie das FFU-Image erneut, wie unter Lab 1a: Erstellen eines Basisimages angegeben. Du kannst den folgenden Befehl verwenden:

New-IoTFFUImage ProductX Test
(or)buildimage ProductX Test 

Nachdem die FFU-Datei erstellt wurde (sie sollte jetzt Ihre App enthalten), können Sie sie wie in Lab 1a angegeben auf Ihr Hardwaregerät laden.

Eine Anleitung zum Installieren einer Appx-Datei auf einem IoT-Gerät finden Sie in der Dokumentation Installieren der App.

Aktualisieren von Apps auf den eigenen IoT Core-Geräten

Nächste Schritte

Lab 1c: Hinzufügen einer Datei und einer Registrierungseinstellung zu einem Image