Lab 1g: Erstellen eines verkaufsfähigen Images

Wir werden die erforderlichen Schritte zum Erstellen eines Einzelhandels-Windows IoT Core-Images ausführen und auf ein bestimmtes Hardwaregerät flashen.

Voraussetzungen/Anforderungen

Stellen Sie sicher, dass Sie ein grundlegendes Bild aus dem Erstellen eines grundlegenden Bilds erstellt haben, sowie alle vorherigen Labs abgeschlossen haben.

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

  • Ein Einzelhandelscodesignaturzertifikat
  • Ein zertifikatübergreifendes Signieren
  • Visual Studio
  • Windows Bewertung und Bereitstellung kiT (Windows ADK)
  • IoT Core PowerShell-Umgebung
  • Ein Text-Editor wie Editor oder VS Code

Ändern von Projektkonfigurationsdateien

Führen Sie die folgenden Schritte aus, um benutzerdefinierte Anwendungen oder Bereitstellungspakete hinzuzufügen, die Sie dem Einzelhandelsimage hinzufügen möchten.

  1. Um eine benutzerdefinierte Anwendung hinzuzufügen, sollten Sie den Anweisungen folgen, die in "App hinzufügen" zu einem Bild aufgeführt sind. Sie würden jedoch anstelle des Befehls "Add-IoTProductFeature" angeben RetailTest, wie hier gezeigt:
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM

Dadurch wird eine FeatureID namens APPX_HELLOWORLDAPP zur XML-Datei des angegebenen Produkts hinzugefügt.

  1. Minimieren Sie die enthaltenen Windows IoT Core-Features. Sie möchten auch alle Testanwendungen entfernen, die standardmäßig mit Testimages für Windows IoT Core enthalten sind. Dies umfasst die IoT Core-Standardanwendung zusammen mit allen anderen Entwicklertools oder Testfeatures. Sie können dies tun, indem Sie Remove-IoTProductFeature verwenden:
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA

Ordnungsgemäß signieren und einschließlich Ihrer Anwendungen

Wenn Sie über eine oder mehrere benutzerdefinierte Anwendungen verfügen, die Sie in Ihr Windows IoT Core-Einzelhandelsimage einschließen möchten, müssen Sie überprüfen, ob diese Anwendungen ordnungsgemäß signiert werden, wenn Sie sie in Ihr Einzelhandelsimage einschließen. Führen Sie diese Schritte für jede Anwendung aus, die Sie in Ihr Bild einschließen möchten. Bitte beachten Sie, dass Sie die Schritte 8 und 9 überspringen können, wenn Sie nur eine Anwendung enthalten müssen.

  1. Installieren Sie Ihr Einzelhandelscodesignierungszertifikat auf Ihrem Techniker-PC.

  2. Öffnen Sie Ihre benutzerdefinierte Anwendung in Visual Studio, und öffnen Sie die Datei "Package.appxmanifest".

  3. Klicken Sie auf die Registerkarte "Verpackung " und klicken Sie auf die Schaltfläche "Zertifikat auswählen" .

Package manifest screen

  1. Das angezeigte Dialogfeld zeigt an, welche Zertifikate für die Codesignierung verwendet werden. Klicken Sie auf das Dropdown "Zertifikat konfigurieren" und wählen Sie "Aus Zertifikatspeicher auswählen"...:

Choose certificate screen

  1. Wählen Sie Ihr Einzelhandelscodesignaturzertifikat aus, wenn Sie aufgefordert werden, und klicken Sie auf "OK".

  2. Speichern Sie Ihr Projekt in Visual Studio, und erstellen Sie dann Ihr Appx-Paket. Bitte beachten Sie, dass Sie beim Erstellen dieses Pakets aufgefordert werden sollten, Ihr Kennwort für Ihr Einzelhandelscodesignierungszertifikat zu erhalten.

  3. Nachdem die Appx-Datei erstellt wurde, führen Sie den folgenden Befehl in Der IoT Core Powershell-Umgebung aus:

Add-IoTAppxPackage "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp
 (or) newAppxPkg "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp

Erstellen der Einzelhandelsimagedateien

Nachdem wir alle benutzerdefinierten Anwendungspakete ordnungsgemäß signiert haben, können wir jetzt das Windows IoT Core-Einzelhandelsimage erstellen. Vergewissern Sie sich, dass das Codesignaturzertifikat für den Einzelhandel auf Ihrem PC installiert ist, bevor Sie die folgenden Schritte ausführen:

  1. Legen Sie die IoT-Signatur fest, um Details zu Ihrem Zertifikat und zertifikatübergreifendem Zertifikat einzuschließen. Dies erfolgt durch Ändern der IoTWorkspace.xml Datei, die sich in Ihrem Arbeitsbereich befindet (z. B. C:\MyWorkspace):
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
  1. Führen Sie IoT Core PowerShell-Umgebung als Administrator aus.

  2. Legen Sie die Umgebung für die Einzelhandelssignatur fest. Dies erfolgt mit Set-IoTRetailSign:

Set-IoTRetailSign On
(or) retailsign on 
  1. Erstellen Sie die Pakete:
New-IoTCabPackage All
(or) buildpkg all 

Sobald alle Pakete .CAB Dateien erstellt wurden, sollten Sie überprüfen, ob jede dieser Dateien mit dem Einzelhandelszertifikat ordnungsgemäß signiert ist. Wenn einige weiterhin mit den Testzertifikaten signiert sind (dies geschieht in der Regel, wenn Sie Ihren Techniker-PC zum Erstellen von Test- und Einzelhandelsimages verwenden), können Sie diese Dateien mithilfe der Redo-IoTCabSignature erneut signieren:

Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
(or) re-sign.cmd C:\BSP.IN C:\BSP.OUT 

Dadurch werden die .CAB Dateien aus c:\BSP.IN, sie mit dem Einzelhandelszertifikat erneut signiert und in das c:\BSP.OUT Verzeichnis kopiert.

  1. Wenn Sie die .CAB Dateien aus Schritt 5 erneut signiert haben, kopieren Sie die neu signierten .CAB Dateien in die C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgsvorhandenen Dateien. In unserem Beispiel werden diese Dateien in C:\IoT\Workspaces\ContosoWS\Build\arm\pkgskopiert.

  2. Erstellen Sie das Yoru-Einzelhandelsimage, indem Sie den folgenden Befehl ausführen:

New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail 
  1. Anschließend können Sie das Einzelhandelsbild wie in Flash einem Bild beschrieben blitzen.

Verwendete Befehle

Hier finden Sie die Befehle (in der Reihenfolge) zum Erstellen eines Einzelhandels-IoT Core-Bilds. Bitte beachten Sie, dass Ihr Einzelhandelscodesignaturzertifikat zuerst installiert werden sollte, und sie kann Sie beim Erneuten Signieren der .CAB Dateien zum Zertifikatkennwort auffordern.

Set-IoTRetailSign On
New-IoTCabPackage All
Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
xcopy C:\BSP.OUT\*.cab C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs\*.cab
New-IoTFFUImage ProductX Retail

Hinzufügen Ihrer Features zur Einzelhandelskonfiguration

  1. Aktualisieren der Produktkonfigurationsdatei mithilfe von Add-IoTProductFeature

    # Add application features
    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    # Add registry and file features
    Add-IoTProductFeature ProductA Retail FILES_CONFIGS -OEM
    Add-IoTProductFeature ProductA Retail REGISTRY_SETTINGS -OEM
    # Add provisioning feature
    Add-IoTProductFeature ProductA Retail PROV_WIFISETTINGS -OEM
    # Add driver
    Add-IoTProductFeature ProductA Retail DRIVERS_HELLOBLINKY -OEM
    

Überprüfen des Einzelhandelsbilds

Ein Benutzer kann einfach ein benutzerdefiniertes Testbild für Windows IoT Core überprüfen, indem er ein Gerät mit dem Aufblenden des Bilds auf dem Gerät aktiviert. Sobald das Gerät ausgeführt wird, können Sie verschiedene Überprüfungen durchlaufen, um zu überprüfen, ob das Gerät wirklich funktionsfähig ist. Die Leichtigkeit dieser Tests hängt von den Sicherheitsfaktoren ab, die in das Bild eingefügt wurden. Da auf einem Testimage keine Sicherheitsprotokolle integriert sind, können Sie alle verfügbaren Entwicklungstools verwenden, um das IoT-Gerät zu testen.

Die Aufgabe des Testens wird für ein benutzerdefiniertes Einzelhandelsimage für Windows IoT Core schwieriger, da Sie Sicherheitsprotokolle als Teil des in das Gerät installierten Bilds einschließen können. Aufgrund der Art dieser Sicherheitsprotokolle können Sie möglicherweise keine verfügbaren Testtools zum Überprüfen des Geräts verwenden, sodass Sie möglicherweise eine Testanwendung schreiben möchten, die auf dem IoT-Gerät ausgeführt werden kann. Diese Anwendung würde dann die Überprüfungstests der verschiedenen Bereiche und Funktionen des IoT-Geräts ausführen.

Das Testen eines benutzerdefinierten Einzelhandelsimages für Windows IoT Core kann durch eine der folgenden Möglichkeiten erfolgen:

Sauberes Einzelhandelsbild

Wenn Sie wirklich ein sauberes Einzelhandelsimage haben möchten, müssen Sie zwei Einzelhandelsbilder für Ihr Gerät erstellen. Diese beiden Bilder sind identisch, außer dass ein Bild Ihre Testanwendung (als Vordergrundanwendung konfiguriert) enthält, während das andere "saubere" Bild nicht vorhanden ist. Sie würden das erste Bild (mit der enthaltenen Testanwendung) blitzen und die Testüberprüfungen auf Ihrem IoT-Gerät ausführen. Nach der Überprüfung können Sie Ihr IoT-Gerät dann erneut mit dem zweiten "sauberen" Einzelhandelsimage für die Verteilung flashen.

Pros: Das endgültige Einzelhandelsbild wird vollständig sauber sein und nur die Elemente, die als notwendig angesehen werden, werden in das Bild einbezogen.

Cons: Einschließlich einer Testanwendung für das Einzelhandelsimage könnte einige mögliche Probleme mit dem Bereitstellungspaket(n) sowie potenzielle Benutzerfehler in der Testanwendung einführen. Dies würde dazu führen, dass sich dieses Einzelhandelsbild anders als das endgültige Einzelhandelsimage unterscheidet.

One-Time Passthrough-Test

Es wird nur ein endgültiges Einzelhandelsimage erstellt und würde auch die Testanwendung enthalten. Sie würden das Bild so konfigurieren, dass nach dem Starten der Out-of-Box-Experience -Anwendung (OOBE) Ihre Testanwendung gestartet wird (als Vordergrundanwendung). Eine bedingte Anweisung innerhalb der Testanwendung würde ausgelöst, sodass die Anwendung bewusst ist, dass sie einmal ausgeführt wurde (verhindern, dass es nach der ersten Aktivierung des Geräts ausgeführt wird).

// Declare variable
Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
    
// Set variable as boolean, numbers, or string values as needed at approperiate location within the test app
localSettings.Values["appRanOnce"] = false;    

// Read variable and verify value to check and apply logic
Object value = localSettings.Values["appRanOnce"];

Hinweis

Verwenden Sie localSettings nur zum Speichern der Variablen, um den Einstellungswert zu speichern. Es gibt eine mögliche Chance, unerwünschte Ergebnisse aus der Verwendung von Features zu verwenden roamingSettings . localSettings kann nur 64k Daten zum Zeitpunkt dieses Schreibvorgangs enthalten. Erfahren Sie mehr über application Einstellungen hier.

Mithilfe des obigen Codeblocks können Sie die Logik zum Starten der Testanwendung anwenden, damit die Anwendung bei nachfolgenden Startvorgängen geeignete Aktionen ausführt.

Welche Arten von Aktionen kann ich ausführen?

  • Starten einer anderen FGA-App
  • Bearbeiten der Registrierung zum Ändern der Startsequenz

Starten einer anderen FGA-Anwendung aus Ihrer Testanwendung

Wenn Sie eine Microsoft Store-App starten, können Sie den folgenden Codeausschnitt verwenden, um Apps zu starten, die über den Store installiert und aktualisiert wurden. Weitere Informationen zu URI-Schemas finden Sie hier.

// Following will launch the Microsoft store app and navigate to the Games section
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://navigatetopage/?Id=Games"));

// Following will launch the One Note app using the package family name (PFN)
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://pdp/?PFN= Microsoft.Office.OneNote_8wekyb3d8bbwe"));

Wenn Sie eine benutzerdefinierte (nicht Microsoft Store)-App starten, können AppServiceConnection Sie eine App mithilfe des Paketfamiliennamens (PFN) starten.

Zunächst müssen Sie die endgültige App (com.concurrency.lwinsapp) mit App-Diensten im System registrieren. Sie müssen den Package.appxmanifest file folgenden Codeblock im <Applications> Abschnitt des Manifests ändern, um den folgenden Codeblock einzuschließen.

<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AppServiceProvider.App">
      <Extensions>
        <uap:Extension Category="windows.appService" EntryPoint="MyAppService.AppLaunchService">
          <uap3:AppService Name="com.concurrency.lwinsapp" uap4:SupportsMultipleInstances="true" />
        </uap:Extension>
      </Extensions>
      ...
</Application>

Das folgende Codesegment startet eine benutzerdefinierte Anwendung:

private AppServiceConnection appLaunchService;
...
this.appLaunchService = new AppServiceConnection();
this.appLaunchService.AppServiceName = "com.concurrency.lwinsapp";
this.appLaunchService.PackageFamilyName = "f3a114f7-e099-4773-8c93-77abcba14f62_004hcn5rxyy0y";
var status = await this.appLaunchService.OpenAsync();

Durch die Kombination von Logik zwischen localSettings und AppServiceConnection, können Sie Ihre Testanwendung auf jedem Start des Geräts umgehen. Im Wesentlichen wird Ihre Testanwendung auf jedem Start ausgeführt, aber "Passthrough" an die endgültige Anwendung beim Start. Falls erforderlich, können Sie Ihre Logik so festlegen, dass das Gerät nicht auf die endgültige Anwendung fortgesetzt wird, wenn Tests auf Ihrer Testanwendung fehlschlägt. Dies kann hilfreich sein, wenn Sie überprüfen müssen, ob das Gerät auf jedem Start vollständig getestet und funktionsfähig ist.

Pros: Sie können das Gerät automatisch auf jedem Start testen, um sicherzustellen, dass bestimmte Bedingungen ordnungsgemäß festgelegt werden und das Gerät vollständig getestet (und sicher).

Cons: Ihre Testanwendung ist mit dem Einzelhandelsimage enthalten. Es gibt das Potenzial Ihrer Anwendung mit Sicherheitslöchern. Stellen Sie sicher, dass Ihre Test-App nach Bedarf gesperrt ist. Aufgrund der Art Ihrer Testanwendung können Sie möglicherweise Features des Geräts ändern.

Nächste Schritte