Condividi tramite


Lab 1g: Creare un'immagine di vendita al dettaglio

Verranno descritti i passaggi necessari per creare un'immagine Windows IoT Core al dettaglio e flasharla in un dispositivo hardware specifico.

Prerequisiti/requisiti

Assicurarsi di aver creato un'immagine di base da Crea un'immagine di base, nonché di completare tutti i lab precedenti.

Per completare questa sezione sono necessari gli strumenti seguenti:

  • Certificato di firma del codice al dettaglio
  • Certificato di firma incrociata
  • Visual Studio
  • Windows Assessment and Deployment KiT (Windows ADK)
  • Ambiente powerShell IoT Core
  • Editor di testo, ad esempio Blocco note o VS Code

Modificare i file di configurazione del progetto

Seguire la procedura seguente per aggiungere applicazioni personalizzate o pacchetti di provisioning che si desidera aggiungere all'immagine di vendita al dettaglio.

  1. Per aggiungere un'applicazione personalizzata, è necessario seguire le istruzioni elencate in Aggiungere un'app a un'immagine. Tuttavia, si specifica Retail invece di Test quando si esegue il comando Add-IoTProductFeature , come illustrato di seguito:
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM

In questo modo viene aggiunto un FeatureID denominato APPX_HELLOWORLDAPP al file XML OEMInput OEMInput specificato del prodotto specificato.

  1. Ridurre al minimo le funzionalità di Windows IoT Core incluse. Si vuole anche rimuovere tutte le applicazioni di test incluse (per impostazione predefinita) con immagini di test per Windows IoT Core. Include l'applicazione predefinita IoT Core insieme ad altri strumenti di sviluppo o funzionalità di test. È possibile eseguire questa operazione usando Remove-IoTProductFeature:
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA

Firma corretta e inclusione delle applicazioni

Se si dispone di una o più applicazioni personalizzate che si desidera includere nell'immagine di vendita al dettaglio di Windows IoT Core, è necessario verificare che queste applicazioni vengano firmate correttamente quando vengono incluse nell'immagine di vendita al dettaglio. Seguire questa procedura per ogni applicazione da includere nell'immagine. Si noti che è possibile ignorare i passaggi 8 e 9 se si dispone solo di un'applicazione da includere.

  1. Installare il certificato di firma del codice al dettaglio nel PC tecnico.

  2. Aprire l'applicazione personalizzata in Visual Studio e aprire il file Package.appxmanifest .

  3. Fare clic sulla scheda Creazione pacchetti e fare clic sul pulsante Scegli certificato.

Schermata manifesto del pacchetto

  1. La finestra di dialogo visualizzata mostrerà il certificato usato per la firma del codice. Fare clic sull'elenco a discesa Configura certificato... e selezionare Seleziona dall'archivio certificati...:

Scegliere la schermata del certificato

  1. Scegliere il certificato di firma del codice al dettaglio quando richiesto e fare clic su OK.

  2. Salvare il progetto in Visual Studio e quindi compilare il pacchetto Appx. Si noti che è necessario richiedere la password per il certificato di firma del codice al dettaglio durante la compilazione di questo pacchetto.

  3. Dopo aver compilato il file Appx, eseguire il comando seguente in Ambiente powershell IoT Core:

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

Compilare i file di immagine per la vendita al dettaglio

Dopo aver firmato correttamente tutti i pacchetti di applicazioni personalizzati, è ora possibile creare l'immagine di vendita al dettaglio di Windows IoT Core. Verificare di avere installato il certificato di firma del codice al dettaglio nel PC prima di seguire questa procedura:

  1. Impostare la firma IoT per includere i dettagli sul certificato e sul certificato incrociato. Questa operazione viene eseguita modificando il file, situato nell'area IoTWorkspace.xml di lavoro (ad esempio C:\MyWorkspace):
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
  1. Eseguire PowerShell Environment di IoT Core come amministratore.

  2. Impostare l'ambiente per la firma al dettaglio. questa operazione viene eseguita con Set-IoTRetailSign:

Set-IoTRetailSign On
(or) retailsign on 
  1. Compilare i pacchetti:
New-IoTCabPackage All
(or) buildpkg all 

Dopo aver compilato tutti i file .CAB pacchetto, è necessario verificare che ognuno di questi file sia firmato correttamente con il certificato di vendita al dettaglio. Se alcuni sono ancora firmati con i certificati di test (questo avviene in genere se si usa il PC tecnico per la compilazione di immagini di test e vendita al dettaglio), è possibile firmare nuovamente questi file usando Redo-IoTCabSignature:

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

Ciò accetta i file di .CAB da c:\BSP.IN, li firma di nuovo con il certificato di vendita al dettaglio e li copia nella c:\BSP.OUT directory.

  1. Se si firmano nuovamente i file di .CAB dal passaggio 5, copiare i file di .CAB firmati nuovamente nel C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgsfile , sovrascrivendo i file esistenti. Nell'esempio, questi file vengono copiati in C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs.

  2. Creare un'immagine di vendita al dettaglio di yoru eseguendo il comando seguente:

New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail 
  1. È quindi possibile eseguire il flash dell'immagine al dettaglio come descritto in Flash un'immagine.

Comandi usati

Ecco i comandi (in ordine) per la creazione di un'immagine IoT Core al dettaglio. Si noti che il certificato di firma del codice al dettaglio deve essere installato prima e può richiedere la password del certificato quando si firmano nuovamente i file di .CAB.

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

Aggiungere le funzionalità alla configurazione della vendita al dettaglio

  1. Aggiornare il file di configurazione del prodotto al dettaglio usando 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
    

Verificare l'immagine di vendita al dettaglio

Un utente può facilmente verificare un'immagine di test personalizzata per Windows IoT Core solo attivando un dispositivo con l'immagine flashata nel dispositivo. Dopo aver eseguito il dispositivo, è possibile eseguire vari controlli per verificare che il dispositivo sia veramente funzionale. La facilità di questi test dipende dai livelli di fattori di sicurezza inseriti nell'immagine. Poiché non sono presenti protocolli di sicurezza predefiniti in un'immagine di test, è possibile usare tutti gli strumenti di sviluppo disponibili per testare il dispositivo IoT.

L'attività di test diventa più difficile per un'immagine di vendita al dettaglio personalizzata per Windows IoT Core, in quanto è possibile includere protocolli di sicurezza come parte dell'immagine installata nel dispositivo. A causa della natura di questi protocolli di sicurezza, potrebbe non essere possibile usare gli strumenti di test disponibili per verificare il dispositivo, quindi è possibile scrivere un'applicazione di test che può essere eseguita nel dispositivo IoT. Questa applicazione eseguirà quindi i test di verifica delle varie aree e funzioni del dispositivo IoT.

Il test di un'immagine di vendita al dettaglio personalizzata per Windows IoT Core può essere eseguita in uno dei modi seguenti:

Pulire l'immagine per la vendita al dettaglio

Se si vuole veramente avere un'immagine di vendita al dettaglio pulita, sarà necessario creare due immagini di vendita al dettaglio per il dispositivo. Queste due immagini saranno identiche, ad eccezione del fatto che un'immagine includerà l'applicazione di test (configurata come applicazione in primo piano), mentre l'altra immagine "pulita" non verrà eseguita. Si flasherebbe la prima immagine (con l'applicazione di test inclusa) ed eseguire le convalida di test nel dispositivo IoT. Dopo aver verificato, è quindi possibile ri flashare il dispositivo IoT con la seconda immagine di vendita al dettaglio "pulita", per la distribuzione.

Professionisti: l'immagine finale della vendita al dettaglio sarà completamente pulita e solo gli elementi considerati necessari sono inclusi nell'immagine.

Cons: inclusa un'applicazione di test per l'immagine di vendita al dettaglio potrebbe introdurre alcuni potenziali problemi con i pacchetti di provisioning, nonché potenziali errori utente nell'applicazione di test. Ciò renderebbe questa immagine di vendita al dettaglio diversa dall'immagine finale della vendita al dettaglio.

test pass-through One-Time

Viene creata solo un'immagine finale per la vendita al dettaglio e includerà anche l'applicazione di test. È possibile configurare l'immagine in modo che dopo l'avvio dell'applicazione OOBE (out-of-box-experience), l'applicazione di test viene avviata (come applicazione in primo piano). Un'istruzione condizionale all'interno dell'applicazione di test viene attivata in modo che l'applicazione sia consapevole che sia stata eseguita una volta prima (impedendo l'esecuzione dopo la prima attivazione del dispositivo).

// 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"];

Nota

Per ottenere risultati ottimali, usare localSettings solo per archiviare le variabili per archiviare il valore delle impostazioni. C'è una possibilità di risultati indesiderati dall'uso roamingSettings di funzionalità. localSettings può contenere solo 64k di dati al momento della scrittura. Altre informazioni sulle impostazioni dell'applicazione sono disponibili qui.

Usando il blocco di codice precedente, è possibile applicare la logica all'avvio dell'applicazione di test in modo che in caso di avvio successivo, l'applicazione esegue azioni appropriate.

Quali tipi di azioni è possibile eseguire?

  • Avviare un'altra app FGA
  • Modificare il Registro di sistema per modificare la sequenza di avvio

Avvio di un'altra applicazione FGA dall'applicazione di test

Se si avvia un'app di Microsoft Store, è possibile usare il frammento di codice seguente per avviare le app installate e aggiornate tramite lo store. Altre informazioni sugli schemi URI sono disponibili qui.

// 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"));

Se si avvia un'app personalizzata (non Microsoft Store), è possibile usare AppServiceConnection per avviare un'app usando il nome della famiglia di pacchetti (PFN).

Prima di tutto, è necessario registrare l'app finale (com.concurrency.lwinsapp) con i servizi app all'interno del sistema. È necessario modificare l'oggetto Package.appxmanifest file per includere il blocco di codice seguente nella <Applications> sezione del manifesto.

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

Il segmento di codice seguente avvia un'applicazione personalizzata:

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();

Combinando la logica tra localSettings e AppServiceConnection, è possibile ignorare l'applicazione di test in ogni avvio del dispositivo. In sostanza, l'applicazione di test verrà eseguita in ogni avvio ma "pass-through" all'applicazione finale all'avvio. Se necessario, è possibile impostare la logica in modo che il dispositivo non continui all'applicazione finale se i test hanno esito negativo nell'applicazione di test. Questo potrebbe essere utile se è necessario verificare che il dispositivo sia completamente testato e funzionale in ogni avvio.

Professionisti: è possibile testare il dispositivo automaticamente in ogni avvio per assicurarsi che determinate condizioni siano impostate correttamente e che il dispositivo sia completamente testato (e sicuro).

Contro: l'applicazione di test è inclusa nell'immagine di vendita al dettaglio. C'è il potenziale dell'applicazione con problemi di sicurezza. Assicurarsi che l'app di test sia bloccata in base alle esigenze. A causa della natura dell'applicazione di test, potrebbe essere possibile modificare le funzionalità del dispositivo.

Passaggi successivi