Microsoft Store Developer CLI (msstore)
Microsoft Store Developer CLI (msstore) est une interface de ligne de commande multiplateforme pour publier et gérer des applications dans le Microsoft Store. Elle s'intègre avec les API Partner Center et supporte les workflows de publication automatisés pour différents types d'applications.
Quand utiliser cette compétence
Utilisez cette compétence quand vous avez besoin de :
- Configurer les identifiants du Store pour accéder à l'API
- Lister les applications dans votre compte Store
- Vérifier l'état d'une soumission
- Publier des soumissions dans le Store
- Empaqueter des applications pour la soumission au Store
- Initialiser des projets pour la publication au Store
- Gérer les package flights (tests bêta)
- Mettre en place des pipelines CI/CD pour la publication automatisée au Store
- Gérer les déploiements progressifs de soumissions
- Mettre à jour les métadonnées de soumission par programmation
Prérequis
- Windows 10+, macOS ou Linux
- .NET 9 Desktop Runtime (Windows) ou .NET 9 Runtime (macOS/Linux)
- Compte Partner Center avec les autorisations appropriées
- Inscription d'application Azure AD avec accès à l'API Partner Center
- CLI msstore installée par l'une de ces méthodes :
- Microsoft Store : Télécharger
- WinGet :
winget install "Microsoft Store Developer CLI" - Manuel : Télécharger depuis GitHub Releases
Configuration de Partner Center
Avant d'utiliser msstore, vous devez créer une application Azure AD avec accès à Partner Center :
- Allez à Partner Center
- Naviguez vers Paramètres du compte > Gestion des utilisateurs > Applications Azure AD
- Créez une nouvelle application et notez l'ID de locataire, l'ID client et le Secret client
- Accordez à l'application les autorisations appropriées (rôle Manager ou Developer)
Référence des commandes principales
info - Afficher la configuration
Affiche la configuration actuelle des identifiants.
msstore info
Options :
| Option | Description |
|---|---|
-v, --verbose |
Afficher une sortie détaillée |
reconfigure - Configurer les identifiants
Configurer ou mettre à jour les identifiants de l'API Microsoft Store.
msstore reconfigure [options]
Options :
| Option | Description |
|---|---|
-t, --tenantId |
ID de locataire Azure AD |
-s, --sellerId |
ID vendeur Partner Center |
-c, --clientId |
ID client de l'application Azure AD |
-cs, --clientSecret |
Secret client pour l'authentification |
-ct, --certificateThumbprint |
Empreinte du certificat (alternative au secret client) |
-cfp, --certificateFilePath |
Chemin du fichier certificat (alternative au secret client) |
-cp, --certificatePassword |
Mot de passe du certificat |
--reset |
Réinitialiser les identifiants sans reconfiguration complète |
Exemples :
# Configurer avec secret client
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --clientSecret $CLIENT_SECRET
# Configurer avec certificat
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --certificateFilePath ./cert.pfx --certificatePassword MyPassword
settings - Paramètres CLI
Modifier les paramètres de Microsoft Store Developer CLI.
msstore settings [options]
Options :
| Option | Description |
|---|---|
-t, --enableTelemetry |
Activer (true) ou désactiver (false) la télémétrie |
Définir le nom d'affichage de l'éditeur
msstore settings setpdn <publisherDisplayName>
Définit le nom d'affichage par défaut de l'éditeur pour la commande init.
apps - Gestion des applications
Lister et récupérer les informations des applications.
Lister les applications
msstore apps list
Liste toutes les applications dans votre compte Partner Center.
Obtenir les détails d'une application
msstore apps get <productId>
Arguments :
| Argument | Description |
|---|---|
productId |
L'ID de produit Store (ex. 9NBLGGH4R315) |
Exemple :
# Obtenir les détails d'une application spécifique
msstore apps get 9NBLGGH4R315
submission - Gestion des soumissions
Gérer les soumissions au Store.
| Sous-commande | Description |
|---|---|
status |
Obtenir l'état de la soumission |
get |
Obtenir les métadonnées de soumission et les informations de package |
getListingAssets |
Obtenir les ressources de listage d'une soumission |
updateMetadata |
Mettre à jour les métadonnées de soumission |
poll |
Interroger l'état de la soumission jusqu'à completion |
publish |
Publier une soumission |
delete |
Supprimer une soumission |
Obtenir l'état de la soumission
msstore submission status <productId>
Obtenir les détails de la soumission
msstore submission get <productId>
Mettre à jour les métadonnées
msstore submission updateMetadata <productId> <metadata>
Où <metadata> est une chaîne JSON avec les métadonnées mises à jour. Comme JSON contient des caractères interprétés par le shell (guillemets, accolades, etc.), vous devez citer et/ou échapper la valeur de manière appropriée :
- Bash/Zsh : Enveloppez le JSON entre guillemets simples pour que le shell le passe littéralement.
msstore submission updateMetadata 9NBLGGH4R315 '{"description":"My updated app"}' - PowerShell : Utilisez des guillemets simples (ou échappez les guillemets doubles dans une chaîne entre guillemets doubles).
msstore submission updateMetadata 9NBLGGH4R315 '{"description":"My updated app"}' - cmd.exe : Échappez chaque guillemet double interne avec une barre oblique inverse.
msstore submission updateMetadata 9NBLGGH4R315 "{\"description\":\"My updated app\"}"
Conseil : Pour les métadonnées complexes ou multi-lignes, enregistrez le JSON dans un fichier et passez son contenu à la place pour éviter les problèmes de citation :
msstore submission updateMetadata 9NBLGGH4R315 "$(cat metadata.json)"
Options :
| Option | Description |
|---|---|
-s, --skipInitialPolling |
Ignorer l'interrogation d'état initiale |
Publier une soumission
msstore submission publish <productId>
Interroger une soumission
msstore submission poll <productId>
Interroge jusqu'à ce que l'état de la soumission soit PUBLISHED ou FAILED.
Supprimer une soumission
msstore submission delete <productId>
Options :
| Option | Description |
|---|---|
--no-confirm |
Ignorer la demande de confirmation |
init - Initialiser le projet pour le Store
Initialiser un projet pour la publication sur Microsoft Store. Détecte automatiquement le type de projet et configure l'identité du Store.
msstore init <pathOrUrl> [options]
Arguments :
| Argument | Description |
|---|---|
pathOrUrl |
Chemin du répertoire du projet ou URL PWA |
Options :
| Option | Description |
|---|---|
-n, --publisherDisplayName |
Nom d'affichage de l'éditeur |
--package |
Empaqueter également le projet |
--publish |
Empaqueter et publier (implique --package) |
-f, --flightId |
Publier vers un flight spécifique |
-prp, --packageRolloutPercentage |
Pourcentage de déploiement progressif (0-100) |
-a, --arch |
Architecture(s) : x86, x64, arm64 |
-o, --output |
Répertoire de sortie pour les packages |
-ver, --version |
Version à utiliser lors de la construction |
Types de projets supportés :
- Windows App SDK / WinUI 3
- UWP
- .NET MAUI
- Flutter
- Electron
- React Native for Desktop
- PWA (Progressive Web Apps)
Exemples :
# Initialiser un projet WinUI
msstore init ./my-winui-app
# Initialiser une PWA
msstore init https://contoso.com --output ./pwa-package
# Initialiser et publier
msstore init ./my-app --publish
package - Empaqueter pour le Store
Empaqueter une application pour la soumission à Microsoft Store.
msstore package <pathOrUrl> [options]
Arguments :
| Argument | Description |
|---|---|
pathOrUrl |
Chemin du répertoire du projet ou URL PWA |
Options :
| Option | Description |
|---|---|
-o, --output |
Répertoire de sortie pour le package |
-a, --arch |
Architecture(s) : x86, x64, arm64 |
-ver, --version |
Version pour le package |
Exemples :
# Empaqueter pour l'architecture par défaut
msstore package ./my-app
# Empaqueter pour plusieurs architectures
msstore package ./my-app --arch x64,arm64 --output ./packages
# Empaqueter avec une version spécifique
msstore package ./my-app --version 1.2.3.0
publish - Publier dans le Store
Publier une application dans le Microsoft Store.
msstore publish <pathOrUrl> [options]
Arguments :
| Argument | Description |
|---|---|
pathOrUrl |
Chemin du répertoire du projet ou URL PWA |
Options :
| Option | Description |
|---|---|
-i, --inputFile |
Chemin vers un fichier .msix ou .msixupload existant |
-id, --appId |
ID de l'application (si non initialisée) |
-nc, --noCommit |
Conserver la soumission en état de brouillon |
-f, --flightId |
Publier vers un flight spécifique |
-prp, --packageRolloutPercentage |
Pourcentage de déploiement progressif (0-100) |
Exemples :
# Publier un projet
msstore publish ./my-app
# Publier un package existant
msstore publish ./my-app --inputFile ./packages/MyApp.msixupload
# Publier en tant que brouillon
msstore publish ./my-app --noCommit
# Publier avec déploiement progressif
msstore publish ./my-app --packageRolloutPercentage 10
flights - Gestion des package flights
Gérer les package flights (groupes de tests bêta).
| Sous-commande | Description |
|---|---|
list |
Lister tous les flights d'une application |
get |
Obtenir les détails du flight |
delete |
Supprimer un flight |
create |
Créer un nouveau flight |
submission |
Gérer les soumissions de flight |
Lister les flights
msstore flights list <productId>
Obtenir les détails d'un flight
msstore flights get <productId> <flightId>
Créer un flight
msstore flights create <productId> <friendlyName> --group-ids <group-ids>
Options :
| Option | Description |
|---|---|
-g, --group-ids |
IDs de groupes de flight (séparés par des virgules) |
-r, --rank-higher-than |
ID du flight à classer plus haut que |
Supprimer un flight
msstore flights delete <productId> <flightId>
Soumissions de flight
# Obtenir la soumission de flight
msstore flights submission get <productId> <flightId>
# Publier la soumission de flight
msstore flights submission publish <productId> <flightId>
# Vérifier l'état de la soumission de flight
msstore flights submission status <productId> <flightId>
# Interroger la soumission de flight
msstore flights submission poll <productId> <flightId>
# Supprimer la soumission de flight
msstore flights submission delete <productId> <flightId>
Gestion du déploiement des flights
# Obtenir l'état du déploiement
msstore flights submission rollout get <productId> <flightId>
# Mettre à jour le pourcentage de déploiement
msstore flights submission rollout update <productId> <flightId> <percentage>
# Arrêter le déploiement
msstore flights submission rollout halt <productId> <flightId>
# Finaliser le déploiement (100%)
msstore flights submission rollout finalize <productId> <flightId>
Workflows courants
Workflow 1 : Configuration initiale du Store
# 1. Installer la CLI
winget install "Microsoft Store Developer CLI"
# 2. Configurer les identifiants (obtenez-les depuis Partner Center)
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --clientSecret $CLIENT_SECRET
# 3. Vérifier la configuration
msstore info
# 4. Lister vos applications pour confirmer l'accès
msstore apps list
Workflow 2 : Initialiser et publier une nouvelle application
# 1. Naviguer vers le projet
cd my-winui-app
# 2. Initialiser pour le Store (crée/met à jour l'identité de l'application)
msstore init .
# 3. Empaqueter l'application
msstore package . --arch x64,arm64
# 4. Publier dans le Store
msstore publish .
# 5. Vérifier l'état de la soumission
msstore submission status <productId>
Workflow 3 : Mettre à jour une application existante
# 1. Construire votre application mise à jour
dotnet publish -c Release
# 2. Empaqueter et publier
msstore publish ./my-app
# Ou publier à partir d'un package existant
msstore publish ./my-app --inputFile ./artifacts/MyApp.msixupload
Workflow 4 : Déploiement progressif
# 1. Publier avec un pourcentage de déploiement initial
msstore publish ./my-app --packageRolloutPercentage 10
# 2. Surveiller et augmenter le déploiement
msstore submission poll <productId>
# 3. (Après validation) Finaliser à 100%
# Cela se fait via Partner Center ou mise à jour de soumission
Workflow 5 : Tests bêta avec flights
# 1. Créer d'abord un groupe de flight dans Partner Center
# Puis créer un flight
msstore flights create <productId> "Beta Testers" --group-ids "group-id-1,group-id-2"
# 2. Publier vers le flight
msstore publish ./my-app --flightId <flightId>
# 3. Vérifier l'état de la soumission du flight
msstore flights submission status <productId> <flightId>
# 4. Après les tests, publier en production
msstore publish ./my-app
Workflow 6 : Intégration de pipeline CI/CD
# Exemple GitHub Actions
name: Publish to Store
on:
release:
types: [published]
jobs:
publish:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Install msstore CLI
run: winget install "Microsoft Store Developer CLI" --accept-package-agreements --accept-source-agreements
- name: Configure Store credentials
run: |
msstore reconfigure --tenantId ${{ secrets.TENANT_ID }} --sellerId ${{ secrets.SELLER_ID }} --clientId ${{ secrets.CLIENT_ID }} --clientSecret ${{ secrets.CLIENT_SECRET }}
- name: Build application
run: dotnet publish -c Release
- name: Publish to Store
run: msstore publish ./src/MyApp
Intégration avec winapp CLI
La CLI winapp (v0.2.0+) s'intègre à msstore via la sous-commande winapp store :
# Ces commandes sont équivalentes :
msstore reconfigure --tenantId xxx --clientId xxx --clientSecret xxx
winapp store reconfigure --tenantId xxx --clientId xxx --clientSecret xxx
# Lister les applications
msstore apps list
winapp store apps list
# Publier
msstore publish ./my-app
winapp store publish ./my-app
Utilisez winapp store quand vous voulez une expérience CLI unifiée pour l'empaquetage et la publication.
Dépannage
| Problème | Solution |
|---|---|
| Échec de l'authentification | Vérifiez les identifiants avec msstore info ; réexécutez msstore reconfigure |
| Application non trouvée | Assurez-vous que l'ID de produit est correct ; exécutez msstore apps list pour vérifier |
| Autorisations insuffisantes | Vérifiez le rôle de l'application Azure AD dans Partner Center (nécessite Manager ou Developer) |
| Échec de la validation du package | Assurez-vous que le package répond aux exigences du Store ; vérifiez Partner Center pour les détails |
| Soumission bloquée | Exécutez msstore submission poll <productId> pour vérifier l'état |
| Flight non trouvé | Vérifiez l'ID du flight avec msstore flights list <productId> |
| Pourcentage de déploiement invalide | La valeur doit être comprise entre 0 et 100 |
| Échec de l'initialisation pour PWA | Assurez-vous que l'URL est publiquement accessible et dispose d'un manifest d'application web valide |
Variables d'environnement
La CLI supporte les variables d'environnement pour les identifiants :
| Variable | Description |
|---|---|
MSSTORE_TENANT_ID |
ID de locataire Azure AD |
MSSTORE_SELLER_ID |
ID vendeur Partner Center |
MSSTORE_CLIENT_ID |
ID client de l'application Azure AD |
MSSTORE_CLIENT_SECRET |
Secret client |