Labo 1g : créer une image de vente au détail
Nous allons détailler les étapes nécessaires pour créer une image Windows IoT Core commerciale et la flasher sur un appareil matériel spécifique.
Conditions préalables/conditions requises
Vérifiez que vous avez créé une image de base à partir de Créer une image de base, et que vous avez terminé tous les labos précédents.
Vous aurez besoin des outils suivants installés pour terminer cette section :
- Un certificat de signature de code de vente au détail
- Un certificat de signature croisée
- Visual Studio
- KiT d’évaluation et de déploiement Windows (Windows ADK)
- Environnement PowerShell IoT Core
- Un éditeur de texte comme le Bloc-notes ou VS Code
Modifier les fichiers de configuration de projet
Suivez les étapes ci-dessous pour ajouter des applications personnalisées ou des packages d’approvisionnement que vous souhaitez ajouter à l’image commerciale.
- Pour ajouter une application personnalisée, vous devez suivre les instructions répertoriées dans Ajouter une application à une image. Toutefois, vous devez spécifier
Retail
au lieu de lors de l’exécution deTest
la commande Add-IoTProductFeature , comme indiqué ici :
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM
Cela ajoute un FeatureID appelé APPX_HELLOWORLDAPP au fichier XML OEMInput de vente au détail du produit spécifié.
- Réduisez les fonctionnalités Windows IoT Core incluses. Vous souhaitez également supprimer toutes les applications de test incluses (par défaut) avec des images de test pour Windows IoT Core. Cela inclut l’application par défaut IoT Core, ainsi que d’autres outils de développement ou fonctionnalités de test. Pour ce faire, utilisez Remove-IoTProductFeature :
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA
Signature correcte et inclusion de vos applications
Si vous avez une ou plusieurs applications personnalisées que vous souhaitez inclure dans votre image commerciale Windows IoT Core, vous devez vérifier que ces applications sont signées correctement lorsque vous les incluez dans votre image commerciale. Suivez ces étapes pour chaque application que vous souhaitez inclure dans votre image. Notez que vous pouvez ignorer les étapes 8 et 9 si vous n’avez qu’une seule application à inclure.
Installez votre certificat de signature de code de vente au détail sur votre PC de technicien.
Ouvrez votre application personnalisée dans Visual Studio et ouvrez le fichier Package.appxmanifest .
Cliquez sur l’onglet Empaquetage, puis sur le bouton Choisir un certificat...
- La boîte de dialogue affichée indique le certificat utilisé pour la signature de code. Cliquez sur la liste déroulante Configurer le certificat... et sélectionnez Choisir dans le magasin de certificats... :
Choisissez votre certificat de signature de code de vente au détail lorsque vous y êtes invité, puis cliquez sur OK.
Enregistrez votre projet dans Visual Studio , puis générez votre package Appx. Notez que vous devez être invité à entrer votre mot de passe pour votre certificat de signature de code de vente au détail lors de la création de ce package.
Une fois le fichier Appx généré, exécutez la commande suivante dans l’environnement 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
Générer les fichiers d’image de vente au détail
Une fois que tous les packages d’application personnalisés sont signés correctement, nous pouvons maintenant générer l’image commerciale Windows IoT Core. Vérifiez que le certificat de signature de code de vente au détail est installé sur votre PC avant de suivre ces étapes :
- Définissez la signature IoT de manière à inclure des détails sur votre certificat et votre certificat croisé. Pour ce faire, modifiez le
IoTWorkspace.xml
fichier situé dans votre espace de travail (par exemple, C:\MyWorkspace) :
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
Exécutez l’environnement PowerShell IoT Core en tant qu’administrateur.
Définissez l’environnement pour la signature commerciale. Cette opération est effectuée avec Set-IoTRetailSign :
Set-IoTRetailSign On
(or) retailsign on
- Générez les packages :
New-IoTCabPackage All
(or) buildpkg all
Une fois tous les fichiers .CAB package générés, vous devez vérifier que chacun de ces fichiers est correctement signé avec le certificat de vente au détail. Si certains sont toujours signés avec les certificats de test (cela se produit généralement si vous utilisez votre PC de technicien pour créer des images de test et de vente au détail), vous pouvez signer à nouveau ces fichiers à l’aide de Redo-IoTCabSignature :
Redo-IoTCabSignature C:\BSP.IN C:\BSP.OUT
(or) re-sign.cmd C:\BSP.IN C:\BSP.OUT
Cela récupère les fichiers .CAB de c:\BSP.IN
, les signe à nouveau avec le certificat de vente au détail et les copie dans le c:\BSP.OUT
répertoire.
Si vous ré-signé les fichiers .CAB de l’étape 5, copiez les fichiers .CAB ré-signés dans le
C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgs
, en remplaçant les fichiers existants. Dans notre exemple, ces fichiers sont copiés dansC:\IoT\Workspaces\ContosoWS\Build\arm\pkgs
.Générez une image de vente au détail yoru en exécutant la commande suivante :
New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail
- Vous pouvez ensuite flasher l’image commerciale comme décrit dans Flasher une image.
Commandes utilisées
Voici les commandes (dans l’ordre) permettant de créer une image IoT Core commerciale. Notez que votre certificat de signature de code de vente au détail doit être installé en premier et qu’il peut vous inviter à entrer le mot de passe du certificat lors de la nouvelle signature des fichiers .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
Ajouter vos fonctionnalités à la configuration de la vente au détail
Mettre à jour le fichier de configuration de la vente au détail du produit à l’aide de 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
Vérifier l’image de vente au détail
Un utilisateur peut facilement vérifier une image de test personnalisée pour Windows IoT Core simplement en activant un appareil avec l’image flashée sur l’appareil. Une fois l’appareil en cours d’exécution, vous pouvez effectuer différentes vérifications pour vérifier que l’appareil est vraiment fonctionnel. La facilité de ces tests dépend des niveaux de facteurs de sécurité intégrés à l’image. Étant donné qu’il n’existe aucun protocole de sécurité intégré à une image de test, vous pouvez utiliser tous les outils de développement disponibles pour tester l’appareil IoT.
La tâche de test devient plus difficile pour une image commerciale personnalisée pour Windows IoT Core, car vous pouvez inclure des protocoles de sécurité dans l’image installée dans l’appareil. En raison de la nature de ces protocoles de sécurité, vous ne pourrez peut-être pas utiliser les outils de test disponibles pour vérifier l’appareil. Vous pouvez donc écrire une application de test qui peut s’exécuter sur l’appareil IoT. Cette application effectue ensuite les tests de vérification des différentes zones et fonctions de l’appareil IoT.
Le test d’une image commerciale personnalisée pour Windows IoT Core peut être effectué de l’une des manières suivantes :
Image de vente au détail propre
Si vous souhaitez vraiment avoir une image de vente au détail propre, vous devez créer deux images de vente au détail pour votre appareil. Ces deux images seront identiques, sauf qu’une image inclura votre application de test (configurée en tant qu’application de premier plan), tandis que l’autre image « propre » ne le sera pas. Vous flashez la première image (avec l’application de test incluse) et effectuez les validations de test sur votre appareil IoT. Une fois la vérification effectuée, vous pouvez flasher à nouveau votre appareil IoT avec la deuxième image commerciale « propre », pour distribution.
Avantages : l’image commerciale finale sera totalement propre et seuls les éléments jugés nécessaires sont inclus dans l’image.
Inconvénients : l’inclusion d’une application de test pour l’image commerciale peut introduire des problèmes potentiels avec le ou les packages d’approvisionnement, ainsi que des erreurs utilisateur potentielles dans l’application de test. Cette image de vente au détail serait différente de l’image commerciale finale.
test de réussite One-Time
Une seule image commerciale finale est créée et inclut également l’application de test. Vous devez configurer l’image de telle sorte qu’une fois l’application OOBE (out-of-box-experience) lancée, votre application de test est lancée (en tant qu’application de premier plan). Une instruction conditionnelle au sein de l’application de test est déclenchée afin que l’application sache qu’elle s’est exécutée une fois avant (l’empêchant de s’exécuter après la première mise sous tension de l’appareil).
// 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"];
Notes
Pour de meilleurs résultats, utilisez localSettings
uniquement pour stocker les variables afin de stocker la valeur des paramètres. Il existe un risque de résultats indésirables de l’utilisation roamingSettings
de fonctionnalités.
localSettings
ne peut contenir que 64 000 données au moment de la rédaction de cet article. En savoir plus sur les paramètres de l’application ici.
À l’aide du bloc de code ci-dessus, vous pouvez appliquer la logique au lancement de votre application de test afin que l’application prenne les mesures appropriées lors des lancements suivants.
Alors, quels types d’actions puis-je entreprendre ?
- Lancer une autre application FGA
- Modifier le Registre pour modifier la séquence de démarrage
Lancement d’une autre application FGA à partir de votre application de test
Si vous lancez une application du Microsoft Store, vous pouvez utiliser l’extrait de code suivant pour lancer des applications installées et mises à jour via le Store. Vous trouverez des informations supplémentaires sur les schémas d’URI ici.
// 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"));
Si vous lancez une application personnalisée (non-Microsoft Store), vous pouvez utiliser AppServiceConnection
pour lancer une application à l’aide du nom de famille de package (PFN).
Tout d’abord, vous devez inscrire l’application finale (com.concurrency.lwinsapp) auprès des services d’application au sein du système. Vous devez modifier le Package.appxmanifest file
pour inclure le bloc de code suivant dans la <Applications>
section du manifeste.
<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>
Le segment de code suivant lance une application personnalisée :
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();
En combinant la logique entre localSettings
et AppServiceConnection
, vous pouvez contourner votre application de test à chaque démarrage de l’appareil. En substance, votre application de test s’exécute à chaque démarrage, mais « passthrough » à l’application finale au démarrage. Si nécessaire, vous pouvez définir votre logique de manière à ce que l’appareil ne passe pas à l’application finale si les tests échouent sur votre application de test. Cela peut être utile si vous devez vérifier que l’appareil est entièrement testé et fonctionnel à chaque démarrage.
Avantages : vous pouvez tester l’appareil automatiquement à chaque démarrage pour vous assurer que certaines conditions sont correctement définies et que l’appareil est entièrement testé (et sécurisé).
Inconvénients : votre application de test est incluse avec l’image commerciale. Votre application peut avoir des failles de sécurité. Assurez-vous que votre application de test est verrouillée en fonction des besoins. En raison de la nature de votre application de test, vous pouvez peut-être modifier les fonctionnalités de l’appareil.