Installez Winget depuis Github sans Microsoft Store
Je vous cache pas que ça a été un peu long, que ça demande un peu trop de steps à mon goût (Microsoft vous répondra « installez le Store »), mais comme ça peut servir dans pas mal de situations et que cet outil commence à devenir réellement intéressant, je partage 🙂
Eh oui, pour rappel, mon PC de jeu est installé avec un Winfows 10 LTSC 2019, donc bloqué en release 18.09, et il est dégraissé de pas mal d’éléments comme Cortana et le Microsoft Store. Ça n’a pas que des avantages, notez :
- Une release qui date d’avant la sortie de mon matériel
- Pas de WSL2
- Pas de Windows Terminal
Et certainement d’autres petits détails qui ne m’ont pas sauté aux yeux. Après le dernier article de NextINpact sur l’outil (je vous laisse aller les lire pour en comprendre l’intérêt), je me suis penché donc sur l’installation de winget depuis les paquets fournis sur Github pour faire un peu joujou avec.
Mais pour ceux qui ont trop la flemme, c’est un utilitaire, qui fait penser à Chocolatey ou WAPT, qui permet d’installer via une commande unique, plusieurs applications provenant de sources différentes. Beaucoup plus efficace et rapide que d’aller sur chaque site officiel (quand les résultats de recherche ne sont pas pourris de liens sponsorisés et de packages frelatés), récupérer chaque fichier d’installation, les vérifier, et enfin se taper tous les process d’installation à grand renfort de clics.
Comme j’envisage de refaire mon installation de Windows en fin d’année avec la dernière LTSC de Windows 10 (à moi WSL2, Windows Terminal et j’en passe), ce logiciel a toute mon attention.
Première erreur : il manque les dépendances
C’est bien un truc qui m’emmerde profondément sous Windows : toutes les applications que vous installez embarquent la plupart du temps leurs propres dépendances, ce qui fait que vous installez x copies d’une même brique utilisée dans plusieurs logiciels. Un point que les distributions Linux ont compris depuis longtemps, ce qui fait que les logiciels proposés dans leurs dépôts sont tous construits sur la même base de dépendances, la mise à jour d’une des briques profitant de fait à tout le monde (et on retombe dans les mêmes problématiques avec snap, flatpak et appImage…).
Donc après avoir récupéré le package sur le dépôt Github, premier échec de l’installation. Ici le message d’erreur était relativement clair :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
PS C:\Users\Seboss666\Downloads> Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle Add-AppxPackage : Échec du déploiement avec HRESULT: 0x80073CF3, Échec des mises à jour, de la dépendance ou de la validation des conflits du package. Windows ne peut pas installer le package Microsoft.DesktopAppInstaller_1.12.11692.0_x64__8wekyb3d8bbwe, car ce package dépend d’une infrastructure qui n’a pas pu être trouvée. Indiquez l’infrastructure «Microsoft.VCLibs.140.00.UWPDesktop » publiée par «CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US», avec une architecture neutre ou de processeur x64 et la version minimale 14.0.29231.0, en plus de ce package à installer. Les infrastructures avec le nom «Microsoft.VCLibs. Windows ne peut pas installer le package Microsoft.DesktopAppInstaller_1.12.11692.0_x64__8wekyb3d8bbwe, car ce package dépend d’une infrastructure qui n’a pas pu être trouvée. Indiquez l’infrastructure «Microsoft.VCLibs.140.00.UWPDesktop » publiée par «CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US», avec une architecture neutre ou de processeur x64 et la version minimale 14.0.29231.0, en plus de ce package à installer. Les infrastructures avec le nom «Microsoft.VCLibs.140.00.UWPDesktop» installées actuellement sont: {} REMARQUE: pour obtenir des informations supplémentaires, recherchez [ActivityId] e5511a5d-ad1a-0008-3346-51e51aadd701 dans le journal des événements ou utilisez la ligne de commande Get-AppPackageLog -ActivityID e5511a5d-ad1a-0008-3346-51e51aadd701 Au caractère Ligne:1 : 1 + Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.m ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (C:\Users\Seboss...bbwe.msixbundle:String) [Add-AppxPackage], IOException + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand |
Relativement hein… Qwant a été mon ami pas mal de fois pendant ce voyage. Déjà, dans la plupart des tutos, donc avec le Store activé, on vous dit « double-cliquez sur le paquet téléchargé ». Vu qu’on ne peut pas cliquer sur le paquet, on lance PowerShell en mode administrateur, et on prie. Cette fois les recherches pointent vers des commandes qui… font lancer le téléchargement de la dépendance depuis le Microsoft Store *clap, clap*
La réponse se trouve dans l’installation manuelle de cette dépendance après l’avoir téléchargé depuis le site de Microsoft, après que je me sois perdu plusieurs dizaines de minutes sur le forum dev de MS et sur des issues Github qui mentionnaient toutes des manipulations depuis Visual Studio, ce qui sans surprise ne me convenait pas. L’installation se fait de la même manière que pour winget, et après ça, on peut retenter :
1 2 |
PS C:\Users\Seboss666\Downloads> Add-AppxPackage -Path .\Microsoft.VCLibs.x64.14.00.Desktop.appx PS C:\Users\Seboss666\Downloads> Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle |
Je n’ai eu de message de retour pour aucune des deux commandes (alors que n’importe quel package manager sous Linux est autrement plus verbeux, pour votre bien). Mais winget est bien installé désormais.
Deuxième erreur : comment dire…
Sauf que là, on retombe dans des travers très « microsoftiens », quand je le lance la première fois :
1 2 3 4 5 6 7 8 9 10 |
PS C:\Users\Seboss666\Downloads> winget.exe --help Le programme «winget.exe» n’a pas pu s’exécuter: Aucune licence d'application applicable n'a été trouvéeAu caractère Ligne:1 : 1 + winget.exe --help + ~~~~~~~~~~~~~~~~~. Au caractère Ligne:1 : 1 + winget.exe --help + ~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException + FullyQualifiedErrorId : NativeCommandFailed |
Je… n’ai pas de mots pour décrire la connerie. Et là, ça a été encore plus long, le thread qui m’aura finalement sauvé se trouve dans une issue Github où l’on constate que plusieurs personnes se plaignent de problèmes d’installation sur des Windows Server, pour lesquels le Store est très facilement dégommé, voire la machine n’a même pas d’accès internet direct pour des raisons de sécurité. Vous me direz, pourquoi installer winget dans ce cas, j’avoue j’ai pas la réponse, à part pour scripter la phase d’installation de prérequis au déploiement d’une machine (ce que j’ai prévu de faire, remember).
Le fichier de licence a cependant été ajouté par Microsoft sans tambours ni trompettes (comprenez sans que ça soit explicitement mentionné ni documenté) dans la liste des ressources accompagnant la release, ce qui ne permet pas d’identifier quand/si on en a besoin. Une fois le fichier récupéré, la commande d’installation se complique salement :
1 2 3 4 5 6 7 8 |
PS C:\Users\Seboss666\Downloads> >> Add-AppxProvisionedPackage -Online -PackagePath .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -LicensePath .\08d8788d59cf47ed9bf42c31e31f8efa_License1.xml -Verbose COMMENTAIRES : Version de l’image cible 10.0.17763.2183 Path : Online : True RestartNeeded : False |
Cette fois on a un message de retour, pour la bonne raison qu’on a ajouté le flag -Verbose
. Est-ce pour autant la fin du calvaire ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
PS C:\Users\Seboss666\Downloads> winget --help Windows Package Manager v1.0.11692 Copyright (c) Microsoft Corporation. Tous droits réservés. L’utilitaire de ligne de commande winget permet d’installer des applications et d’autres packages à partir de la ligne de commande. consommation: winget [<commande>] [<options>] Les commandes suivantes sont disponibles : install Installe le package donné show Affiche des informations sur un package source Gérer les sources des packages search Rechercher et afficher des informations de base sur les packages list Afficher les packages installés upgrade Met à niveau le package donné uninstall Désinstallation du paquet donné hash Assistant pour le hachage des fichiers d’installation validate Valide un fichier manifeste settings Ouvrir les paramètres features Affiche le statut des fonctionnalités expérimentales export Exporte une liste des packages installés import Installe tous les packages dans un fichier Pour en savoir plus sur une commande spécifique, passez-la à l’argument aide. [-?] Les options suivantes sont disponibles : -v,--version Afficher la version de l’outil --info Afficher les informations générales de l’outil Vous trouverez de l’aide supplémentaire sur : https://aka.ms/winget-command-help |
Enfin, ça semble fonctionner, et une recherche de package montre bien des résultats :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
PS C:\Users\Seboss666\Downloads> winget search gimp Nom ID Version Correspondance ----------------------------------------------------- GIMP GIMP.GIMP 2.10.24 GIMP Nightly GIMP.GIMP.Nightly 2.99.6 Tag: gimp PS C:\Users\Seboss666\Downloads> winget show gimp Trouvé GIMP [GIMP.GIMP] Version: 2.10.24 Publisher: The GIMP Team Author: The GIMP Team Moniker: GIMP Description: GIMP is an acronym for GNU Image Manipulation Program. It is a freely distributed program for such tasks as photo retouching, image composition and image authoring. Homepage: https://www.gimp.org License: Copyright (C) 2007 Free Software Foundation, Inc. - GNU General Public License License Url: https://www.gimp.org/about/COPYING Installer: Type: Inno Download Url: https://download.gimp.org/pub/gimp/v2.10/windows/gimp-2.10.24-setup-1.exe SHA256: 84a542d717217f5fb996a18093c4424136978ebbf3815db2ee3c5daa8dcafc0b |
Quand j’ai fait la recherche, l’annonce de la sortie de la version 2.10.28 de GIMP venait de tomber dans mes flux RSS, donc je me fais pas trop de soucis que ça sera à jour sous peu.
Ah, dernière petite erreur, sans surprise vu que c’est un outil Microsoft, il embarque de la télémétrie. Pour la désactiver, il faut faire un winget settings
et vous croisez les doigts (chez moi sans que je sache pourquoi j’avais pas d’éditeur par défaut pour les fichiers json, du coup ça complique temporairement les choses), il faut ajouter les éléments suivants :
1 2 3 |
"telemetry": { "disable": true }, |
Attention : packages en anglais
C’est très fréquent pour des logiciels jeunes comme winget, surtout quand c’est initié par une boite américaine : la plupart des logiciels vont être installés par défaut dans la langue de Shakespeare. Je n’ai pas trop regardé encore comment améliorer ça pour les gens que ça dérange, pour ma part, je suis assez à l’aise, même si certains logiciels sont quand même plus agréables à gérer dans notre si belle langue (surtout avec des sites web qui détectent votre langue à partir de celle de votre navigateur préféré par exemple).
Le fait est que la source des manifestes d’installation se trouve sur Github, et les contributions sont ouvertes, donc dans la grande tradition de git et de la plateforme en particulier, les ajouts peuvent se faire à coup de forks et de pull requests. Il est même possible de créer son propre dépôt ou « source » de packages si l’envie vous en prend. On est donc sur un bel outil qui semble amené à un bel avenir. Il va être temps de se préparer un joli script d’installation massive 🙂
Ne nous excitons pas trop vite car pour le moment, on ne peut pas encore invoquer winget à distance.
Ca coince de mon côté en powershell remote, ce qui m’a amené vers
https://github.com/microsoft/winget-cli/issues/1474
Et c’est le cas pour toutes les apps déployées via le AppInstaller.