¿Sin tiempo o ganas de estudiar archivos WiX de kilómetros para construir un instalador MSI para su proyecto, mientras se sumerge en el abismo de MSDN? ¿Desea ensamblar el instalador, describiéndolo en términos simples y comprensibles, en varias líneas? ¿Existe una tendencia clínica hacia multiplataforma y compilaciones bajo Linux y Docker? Pues bien, debajo del corte!
Desarrolladores obligados
En realidad, fue con estos "Lista de deseos" que surgió nuestro proyecto de un editor de gráficos vectoriales multiplataforma hace un par de meses.
Sabíamos sobre WiX Toolset (Windows Installer XML), pero incluso un vistazo rápido a los tutoriales en el sitio web oficial me entristeció y desanimó: no se pudo hacer una inmersión seria en las descripciones XML de los instaladores. Utilizamos un MakeMsi más simple, pero tenía muchos defectos. Y nuevamente, todas estas herramientas no eran adecuadas para construir MSI bajo Linux.
La búsqueda condujo al proyecto wixl , que creó MSI en Linux, pero sufrió una falla funcional grave y requirió los mismos archivos XML de tamaño monstruoso que WiX.
Como resultado, para obtener la herramienta adecuada para el ensamblaje, reimplementamos la lógica wixl en python, corrigiendo muchas deficiencias y agregando la funcionalidad necesaria, e hicimos el proyecto multiplataforma. Así es como surgió WIX.Py, un compilador MSI con un umbral de entrada muy bajo.
Cómo funciona WiX.Py
El proceso de creación de un paquete MSI se simplifica al límite:
En una carpeta arbitraria (por ejemplo, build
) formamos el contenido para la instalación en la forma en que estará en la computadora de destino.
Completamos un pequeño archivo JSON. Por ejemplo:
{ "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": "./" }
Generamos el paquete MSI con el comando:
wix.py <_>.json
Sí, este es un ejemplo completamente funcional de un paquete MSI que comprobará antes de instalar que Windows 64bit instalará la aplicación en Program Files
, agregará la aplicación al menú del programa y al escritorio, y adjuntará los formatos de archivo especificados a la aplicación instalada. No hay magia y chamanismo con el registro.
Puede reducir aún más el ejemplo a 5-6 líneas, pero la funcionalidad del instalador será bastante escasa.
Usando WiX.Py, el ensamblaje MSI se puede realizar tanto en Windows como en Linux, incluyendo en contenedores acoplables. Dado que la base libmsi se puede construir en muchos otros sistemas UNIX (por ejemplo, macOS), formalmente WiX.Py también se puede usar en ellos, pero esto no tiene ningún sentido práctico.
Puede encontrar una descripción de los diversos matices en la documentación del proyecto .
Conclusión
Si WiX.Py le conviene para resolver los problemas de creación de paquetes MSI, pero no tiene ninguna funcionalidad, vaya a nuestro sitio web https://wix.sk1project.net y cree una solicitud para ampliar la funcionalidad. Lo mismo se aplica a los errores detectados: informe y nos ocuparemos de ellos. Allí, en el sitio, encontrará el código fuente y los paquetes listos para usar para diferentes plataformas.
Si desea comparar con WiX, entonces en Habré ya ha habido artículos sobre WiX: 1 , 2 , 3 , 4 .