Pas le temps et l'envie d'étudier des fichiers WiX au kilomètre pour construire un installateur MSI pour votre projet, tout en plongeant dans l'abîme de MSDN? Voulez-vous assembler l'installateur, le décrire en termes simples et compréhensibles, en plusieurs lignes? Y a-t-il une tendance clinique à multiplier les plates-formes et les builds sous Linux & Docker? Eh bien, sous la coupe!
Développeurs obligés
En fait, c'est avec ces «Wishlist» que notre projet d' éditeur de graphiques vectoriels multiplateforme est apparu il y a quelques mois.
Nous connaissions WiX Toolset (Windows Installer XML), mais même un rapide coup d'œil aux tutoriels sur le site officiel m'a rendu triste et découragé - une immersion sérieuse dans les descriptions XML des installateurs ne pouvait pas être faite. Nous avons utilisé un MakeMsi plus simple, mais il avait beaucoup de défauts. Et encore une fois, tous ces outils n'étaient pas adaptés à la construction de MSI sous Linux.
La recherche a conduit au projet wixl , qui a construit MSI sur Linux, mais a souffert d'une grave faille fonctionnelle et a nécessité les mêmes fichiers XML de taille monstrueuse que WiX.
En conséquence, afin d'obtenir le bon outil pour l'assemblage, nous avons réimplémenté la logique wixl en python, corrigé de nombreuses lacunes et ajouté les fonctionnalités nécessaires, et rendu le projet multiplateforme. C'est ainsi qu'est né WIX.Py, un compilateur MSI avec un seuil d'entrée très bas.
Fonctionnement de WiX.Py
Le processus de création d'un package MSI est simplifié à la limite:
Dans un dossier arbitraire (par exemple build
), nous formons le contenu pour l'installation sous la forme dans laquelle il se trouvera sur l'ordinateur cible.
Nous remplissons un petit fichier JSON. Par exemple:
{ "Name": "MyApp", "UpgradeCode": "3AC4B4FF-10C4-4B8F-81AD-BAC3238BF690", "Version": "0.1", "Manufacturer": "My Company", "Description": "MyApp 0.1 Installer", "Comments": "Licensed under GPLv3+", "Keywords": "wxs, xml, build", "Win64": true, "_CheckX64": true, "_AppIcon": "resources/myapp.ico", "_ProgramMenuFolder": "My Company", "_Shortcuts": [ {"Name": "MyApp", "Description": "MyApplication", "Target": "myapp.exe", "AddOnDesktop": true, "OpenWith": [".xml", ".wxs", ".yml"] } ], "_SourceDir": "build/", "_InstallDir": "myapp-0.1", "_OutputName": "myapp-0.1_win64.msi", "_OutputDir": "./" }
Nous générons le package MSI avec la commande:
wix.py <_>.json
Oui, il s'agit d'un exemple pleinement fonctionnel d'un package MSI qui vérifiera avant l'installation que Windows 64 bits installera l'application dans Program Files
, ajoutera l'application au menu du programme et au bureau et attachera les formats de fichier spécifiés à l'application installée. Pas de magie et de chamanisme avec le registre.
Vous pouvez réduire davantage l'exemple à 5-6 lignes, mais la fonctionnalité du programme d'installation sera alors assez limitée.
À l'aide de WiX.Py, l'assemblage MSI peut être effectué à la fois sur Windows et Linux, y compris dans des conteneurs docker. Étant donné que la libmsi de base peut être construite sur de nombreux autres systèmes UNIX (par exemple macOS), formellement WiX.Py peut également être utilisé sur ces systèmes, mais cela n'a aucun sens pratique.
Vous pouvez trouver une description des différentes nuances dans la documentation du projet .
Conclusion
Si WiX.Py vous convient pour résoudre les problèmes de création de packages MSI, mais manque de fonctionnalité, accédez à notre site Web https://wix.sk1project.net et créez une demande d'extension de la fonctionnalité. La même chose s'applique aux bogues détectés - signalez-les et nous les traiterons. Sur le site, vous trouverez le code source et des packages prêts à l'emploi pour différentes plates-formes.
S'il y a une envie de comparer avec WiX, alors sur Habré il y a déjà eu des articles sur WiX: 1 , 2 , 3 , 4 .