WiX.Py: coletamos o pacote MSI "em três linhas"

Sem tempo e vontade de estudar arquivos WiX de quilômetros para criar um instalador MSI para o seu projeto, enquanto mergulha no abismo do MSDN? Deseja montar o instalador, descrevendo-o em termos simples e compreensíveis, em várias linhas? Existe uma tendência clínica para plataformas cruzadas e compilações no Linux & Docker? Bem, então, sob o corte!


Desenvolvedores Compelidos


Na verdade, foi com essas “lista de desejos” que nosso projeto de um editor de gráficos vetoriais de plataforma cruzada surgiu alguns meses atrás.


Sabíamos do WiX Toolset (Windows Installer XML), mas mesmo uma rápida olhada nos tutoriais no site oficial me deixou triste e desanimada - uma imersão séria nas descrições XML dos instaladores não pôde ser feita. Usamos um MakeMsi mais simples, mas tinha muitas falhas. E, novamente, todas essas ferramentas não eram adequadas para criar o MSI no Linux.


A pesquisa levou ao projeto wixl , que construiu o MSI no Linux, mas sofria de uma falha funcional grave e exigia os mesmos arquivos XML de tamanho monstruoso que o WiX.


Como resultado, para obter a ferramenta certa para a montagem, reimplementamos a lógica wixl em python, corrigindo muitas deficiências e adicionando a funcionalidade necessária e fizemos o projeto em várias plataformas. Foi assim que o WIX.Py surgiu, um compilador MSI com um limite de entrada muito baixo.


Como o WiX.Py funciona


O processo de criação de um pacote MSI é simplificado até o limite:


  1. Em uma pasta arbitrária (por exemplo, build ), formamos o conteúdo para instalação na forma em que ele estará no computador de destino.


  2. Nós preenchemos um pequeno arquivo JSON. Por exemplo:


     { "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. Geramos o pacote MSI com o comando:


     wix.py <_>.json 


Sim, este é um exemplo completo de um pacote MSI que verificará antes de instalar o Windows 64bit instalará o aplicativo nos Program Files , adicionará o aplicativo ao menu do programa e à área de trabalho e anexará os formatos de arquivo especificados ao aplicativo instalado. Sem mágica e xamanismo com o registro.


Você pode reduzir ainda mais o exemplo para 5-6 linhas, mas a funcionalidade do instalador será bastante escassa.


Usando o WiX.Py, a montagem MSI pode ser realizada no Windows e Linux, incluindo em contêineres. Como a libmsi base pode ser construída em muitos outros sistemas UNIX (por exemplo, macOS), o WiX.Py formalmente também pode ser usado neles, mas isso não faz sentido prático.


Você pode encontrar uma descrição das várias nuances na documentação do projeto .


Conclusão


Se o WiX.Py lhe convier para solucionar os problemas de criação de pacotes MSI, mas não possuir nenhuma funcionalidade, acesse nosso site https://wix.sk1project.net e crie uma solicitação para expandir a funcionalidade. O mesmo se aplica aos bugs detectados - relate e nós iremos lidar com eles. Lá, no site, você encontrará o código fonte e os pacotes prontos para diferentes plataformas.


Se houver um desejo de comparar com o WiX, em Habré já existem artigos sobre o WiX: 1 , 2 , 3 , 4 .

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


All Articles