WiX.Py: Wir sammeln das MSI-Paket "in drei Zeilen"

Keine Zeit oder Lust, kilometerlange WiX-Dateien zu studieren, um ein MSI-Installationsprogramm für Ihr Projekt zu erstellen, während Sie in den Abgrund von MSDN eintauchen? Möchten Sie das Installationsprogramm zusammenstellen und es in einfachen und verständlichen Worten in mehreren Zeilen beschreiben? Gibt es eine klinische Tendenz zu plattformübergreifenden und Builds unter Linux & Docker? Na dann, unter dem Schnitt!


Erzwungene Entwickler


Tatsächlich ist mit dieser „Wunschliste“ vor einigen Monaten unser Projekt eines plattformübergreifenden Vektorgrafik-Editors entstanden.


Wir wussten über WiX Toolset (Windows Installer XML) Bescheid, aber selbst ein kurzer Blick auf die Tutorials auf der offiziellen Website machte mich traurig und entmutigt - ein ernsthaftes Eintauchen in XML-Beschreibungen von Installationsprogrammen war nicht möglich. Wir haben ein einfacheres MakeMsi verwendet, aber es hatte viele Mängel. Auch hier waren all diese Tools nicht zum Erstellen von MSI unter Linux geeignet.


Die Suche führte zu dem wixl-Projekt , das MSI unter Linux erstellte, jedoch unter einem schwerwiegenden Funktionsfehler litt und dieselben XML-Dateien von ungeheurer Größe wie WiX benötigte.


Um das richtige Werkzeug für die Assembly zu erhalten, haben wir die Wixl-Logik in Python neu implementiert, viele Mängel behoben und die erforderlichen Funktionen hinzugefügt und das Projekt plattformübergreifend gestaltet. So entstand WIX.Py, ein MSI-Compiler mit einer sehr niedrigen Einstiegsschwelle.


So funktioniert WiX.Py


Das Erstellen eines MSI-Pakets wird bis zum Limit vereinfacht:


  1. In einem beliebigen Ordner (z. B. build ) bilden wir den Inhalt für die Installation in der Form, in der er sich auf dem Zielcomputer befindet.


  2. Wir füllen eine kleine JSON-Datei aus. Zum Beispiel:


     { "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": "./" } 

  3. Wir generieren das MSI-Paket mit dem Befehl:


     wix.py <_>.json 


Ja, dies ist ein voll funktionsfähiges Beispiel für ein MSI-Paket, das vor der Installation überprüft, ob Windows 64bit die Anwendung in Program Files installiert, die Anwendung zum Programmmenü und zum Desktop hinzufügt und die angegebenen Dateiformate an die installierte Anwendung anfügt. Keine Magie und Schamanismus mit dem Register.


Sie können das Beispiel weiter auf 5-6 Zeilen reduzieren, aber dann ist die Funktionalität des Installationsprogramms recht spärlich.


Mit WiX.Py kann die MSI-Assembly sowohl unter Windows als auch unter Linux ausgeführt werden, einschließlich in Docker-Containern. Da die Basislibmsi auf vielen anderen UNIX-Systemen (z. B. macOS) aufgebaut werden kann, kann formal auch WiX.Py auf diesen verwendet werden, dies ist jedoch praktisch nicht sinnvoll.


Eine Beschreibung der verschiedenen Nuancen finden Sie in der Projektdokumentation .


Fazit


Wenn WiX.Py zur Lösung der Probleme beim Erstellen von MSI-Paketen geeignet ist, jedoch keine Funktionalität vorhanden ist, besuchen Sie unsere Website https://wix.sk1project.net und erstellen Sie eine Anfrage zur Erweiterung der Funktionalität. Gleiches gilt für erkannte Fehler - melden Sie sich und wir werden uns um sie kümmern. Dort auf der Website finden Sie den Quellcode und vorgefertigte Pakete für verschiedene Plattformen.


Wenn Sie mit WiX vergleichen möchten, gibt es auf Habré bereits Artikel über WiX: 1 , 2 , 3 , 4 .

Source: https://habr.com/ru/post/de424091/


All Articles