Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide montre comment utiliser l’interface winapp CLI avec une application Rust pour déboguer avec l’identité de package et empaqueter votre application en tant que MSIX.
Pour obtenir un exemple de travail complet, consultez l’exemple Rust dans ce référentiel.
L’identité de package est un concept de base dans le modèle Windows app. Elle permet à votre application d’accéder à des API Windows spécifiques (telles que notifications, sécurité, API IA, etc.), d’avoir une expérience d’installation/désinstallation propre, etc.
Un exécutable standard (tel qu’un fichier créé avec cargo build) n’a pas d’identité de package. Ce guide montre comment l’ajouter pour le débogage, et ensuite l'emballer pour la distribution.
Prerequisites
Chaîne d’outils Rust : Installez Rust à l’aide de rustup ou winget (ou mettez à jour si déjà installé) :
winget install Rustlang.Rustup --source wingetwinapp CLI : Installez l’outil
winappvia winget (ou mettez à jour s’il est déjà installé) :winget install microsoft.winappcli --source winget
1. Créer une application Rust
Commencez par créer une application Rust simple :
cargo new rust-app
cd rust-app
Exécutez-le pour vous assurer que tout fonctionne :
cargo run
La sortie doit être « Hello, world ! »
2. Mettre à jour le code pour vérifier l’identité
Nous allons mettre à jour l’application pour vérifier si elle s’exécute avec l’identité du package. Cela nous aidera à vérifier que l’identité fonctionne correctement dans les étapes ultérieures. Nous allons utiliser le module windows pour accéder aux API Windows.
Tout d’abord, ajoutez la windows dépendance à votre Cargo.toml en exécutant :
cargo add windows --features ApplicationModel
Cela ajoute les liaisons d’API Windows avec la fonctionnalité ApplicationModel, qui nous donne accès à l’API Package pour vérifier l’identité.
Ensuite, remplacez l’intégralité du contenu de src/main.rs par le code suivant. Ce code tente de récupérer l’identité actuelle du package. S’il réussit, il imprime le nom de la famille de packages ; sinon, il imprime « Non empaqueté ».
Note
L'exemple full inclut également du code pour afficher une notification Windows si l'identité est présente, mais pour ce guide, nous allons nous concentrer sur la vérification des identités.
use windows::ApplicationModel::Package;
fn main() {
match Package::Current() {
Ok(package) => {
match package.Id() {
Ok(id) => match id.FamilyName() {
Ok(name) => println!("Package Family Name: {}", name),
Err(e) => println!("Error getting family name: {}", e),
},
Err(e) => println!("Error getting package ID: {}", e),
}
}
Err(_) => println!("Not packaged"),
}
}
3. Exécuter sans identité
À présent, générez et exécutez l’application comme d’habitude :
cargo run
La sortie « Non empaquetée » doit s’afficher. Cela confirme que l’exécutable standard est en cours d’exécution sans identité de package.
4. Initialiser le projet avec l’interface CLI winapp
La winapp init commande configure tout ce dont vous avez besoin en une seule fois : manifeste d’application et ressources. Le manifeste définit l'identité de votre application (nom, éditeur, version) que Windows utilise pour accorder l'accès à l'API.
Exécutez la commande suivante et suivez les instructions :
winapp init
Lorsque vous y êtes invité :
- Nom du package : appuyez sur Entrée pour accepter la valeur par défaut (rust-app)
- Publisher nom : appuyez sur Entrée pour accepter la valeur par défaut ou entrer votre nom
- Version : appuyez sur Entrée pour accepter la version 1.0.0.0
- Description : Appuyez sur Entrée pour accepter la valeur par défaut ou entrer une description
-
Configuration des SDKs : sélectionnez « Ne pas configurer les SDKs » (Rust utilise son propre
windowscrate, pas les en-têtes du SDK C++)
Cette commande va :
- Créer
Package.appxmanifest: manifeste qui définit l’identité de votre application - Créer un
Assetsdossier : icônes requises pour l’empaquetage MSIX et la soumission du Windows Store
Note
Étant donné qu’aucun paquet SDK n’est géré, aucun winapp.yaml n’est créé — Rust utilise le crate via Cargo, donc il n’y a rien à winapp restore/update suivre.
Vous pouvez ouvrir Package.appxmanifest pour personnaliser davantage les propriétés telles que le nom d’affichage, l’éditeur et les fonctionnalités.
Ajouter un alias d’exécution (pour les applications console)
Comme cargo new il crée une application console, nous devons ajouter un alias d’exécution au manifeste. Sans cela, winapp run lance l’application via l’activation AUMID, qui ouvre une nouvelle fenêtre , et cette fenêtre se ferme immédiatement lorsqu’une application console se termine, avalant toute sortie.
L’alias permet également aux utilisateurs d’exécuter votre application par nom à partir d’un terminal après avoir installé MSIX. Le manifeste inscrit un alias comme rust-app.exe (par défaut le nom d’exe de votre projet), que les utilisateurs peuvent appeler en tant que rust-app ou rust-app.exe.
Ignorez cette étape si vous créez une application d’interface utilisateur (une application Rust qui affiche sa propre fenêtre). Ces applications fonctionnent correctement avec le lancement AUMID par défaut.
Ajoutez l’alias :
winapp manifest add-alias
Cela ajoute une uap5:ExecutionAlias entrée à Package.appxmanifest.
5. Déboguer avec l’identité numérique
Pour tester les fonctionnalités qui nécessitent une identité (comme notifications) sans empaqueter entièrement l’application, utilisez winapp run. Cela enregistre l’intégralité du dossier de sortie de build sous la forme d’un package de disposition libre, tout comme une installation MSIX réelle, et lance l’application. Aucun certificat ou signature n’est nécessaire pour le débogage.
Générez l’exécutable :
cargo buildExécuter avec l’identité :
winapp run .\target\debug --with-alias
L’indicateur --with-alias lance l’application via son alias d’exécution afin que la sortie de la console reste dans le terminal actuel. Cela nécessite le uap5:ExecutionAlias que nous avons ajouté à l'étape 4.
Note
winapp run inscrit également le package sur votre système. C’est pourquoi MSIX peut apparaître comme « déjà installé » lorsque vous essayez de l’installer plus tard à l’étape 6. Utilisez winapp unregister pour nettoyer les packages de développement quand vous avez terminé.
Vous devez maintenant voir un résultat semblable à :
Package Family Name: rust-app_12345abcde
Cela confirme que votre application est en cours d’exécution avec une identité de package valide !
Conseil / Astuce
Pour les flux de travail de débogage avancés (attachement de débogueurs, configuration de l’IDE, débogage au démarrage), consultez le Guide de débogage.
6. Package avec MSIX
Une fois que vous êtes prêt à distribuer votre application, vous pouvez la empaqueter en tant que MSIX à l’aide du même manifeste. MSIX fournit une expérience d’installation/désinstallation propre, de mises à jour automatiques et d’installation approuvée.
Préparer le répertoire du package
Tout d’abord, générez votre application en mode mise en production pour obtenir des performances optimales :
cargo build --release
Ensuite, créez un répertoire avec uniquement les fichiers nécessaires à la distribution. Le target\release dossier contient des artefacts de build qui ne font pas partie de votre application. Nous avons uniquement besoin de l’exécutable :
mkdir dist
copy .\target\release\rust-app.exe .\dist\
Générer un certificat de développement
Les packages MSIX doivent être signés. Pour les tests locaux, générez un certificat de développement auto-signé :
winapp cert generate --if-exists skip
Important
L'éditeur du certificat doit correspondre à l'Publisher dans votre Package.appxmanifest. La cert generate commande lit cette opération automatiquement à partir de votre manifeste.
Signer et Emballer
Vous pouvez maintenant empaqueter et vous connecter en une seule étape :
winapp pack .\dist --cert .\devcert.pfx
Remarque : la
packcommande utilise automatiquement package.appxmanifest à partir de votre répertoire actif et la copie dans le dossier cible avant l’empaquetage. Le fichier .msix généré se trouvera dans le répertoire actif.
Installer le certificat
Avant de pouvoir installer le package MSIX, vous devez approuver le certificat de développement sur votre ordinateur. Exécutez cette commande en tant qu’administrateur (vous devez effectuer cette opération une seule fois par certificat) :
winapp cert install .\devcert.pfx
Installer et exécuter
Note
Si vous avez utilisé winapp run à l’étape 5, le package peut déjà être inscrit sur votre système. Utilisez winapp unregister d’abord pour supprimer l’inscription de développement, puis installer le package de mise en production.
Installez le package en double-cliquant sur le fichier généré .msix ou via PowerShell :
Add-AppxPackage .\rust-app.msix
Vous pouvez maintenant exécuter votre application n’importe où dans le terminal en tapant :
rust-app
Vous devez voir la sortie « Nom de la famille de packages », confirmant son installation et son exécution avec l’identité.
Conseil / Astuce
Si vous devez repackager votre application (par exemple, après une modification du code), incrémentez le Version dans votre Package.appxmanifest, avant de lancer à nouveau winapp pack. Windows nécessite un numéro de version supérieur pour mettre à jour un package installé.
Conseils
- Une fois que vous êtes prêt à être distribué, vous pouvez signer votre MSIX avec un certificat de signature de code auprès d’une autorité de certification afin que vos utilisateurs n’aient pas besoin d’installer un certificat auto-signé
- Le Microsoft Store signera le MSIX pour vous, sans avoir à le signer vous-même avant la soumission.
- Vous devrez peut-être créer plusieurs packages MSIX, un pour chaque architecture prise en charge (x64, Arm64)
Prochaines étapes
- Distribute via winget : envoyez votre MSIX au dépôt Windows Gestionnaire de package Community Repository
-
Publish dans le Microsoft Store : utilisez
winapp storepour envoyer votre package -
Configurer CI/CD : utilisez l’action
setup-WinAppCliGitHub pour automatiser l’empaquetage dans votre pipeline - Explorez les API Windows : avec l’identité du package, vous pouvez maintenant utiliser les Notifications, l’IA sur appareil et d’autres API dépendantes de l’identité
Windows developer