Há muitos anos fizemos um post sobre Como criar um pacote MSI a partir de um monitoramento do computador (e gerando um pacote MSI que executasse as mesmas alterações monitoradas). Agora vamos mostrar como fazer um pacote MSI customizado, utilizando o WiX 3.14.
Deixaremos um exemplo prático e também disponibizaremos em nosso GitHub. Para simplificar, em nosso exemplo, faremos uma instalação para o perfil do usuário (na pasta appdata, sem precisar de elevação).
Criando um pacote MSI
Instale o WiX 3.14 em seu computador, reinicie, abre o CMD e veja se consegue acessar a pasta C:\Program Files (x86)\WiX Toolset v3.14\bin e executar os comandos candle.exe e light.exe
Gere um ID para sua aplicação, para isso abre o PowerShell e execute o comando (copie o código gerado, será usado mais para frente):
[guid]::NewGuid()
Agora crie a estrutura de pasta (em preto) e arquivos (em azul):
C:\
└──Temp
└── MSI
├── Arquivos
├── bin
├── Images
├── obj
├── Build.cmd
├── License.rtf
└── Product.wxs
Na pasta Arquivos coloque os arquivos que você deseja em seu pacote (indepentende de para onde cada arquivo será colocado).
Na pasta Imagens coloque:
- Um icone com nome logo.ico ;
- Uma imagem WixUIBanner.bmp (com resolução 493 de largura x 58 de altura);
- Uma imagem WixUIDialog.bmp (com resolução 493 de largura x 312 de altura);
No arquivo Build.cmd coloque o seguinte conteúdo:
@echo off
goto inicio
:erro
echo.
echo Erro
goto fim
:inicio
set WIX=C:\Program Files (x86)\WiX Toolset v3.14\bin
if not exist obj mkdir obj
if not exist bin mkdir bin
echo.
echo ======================================
echo Limpando arquivos antigos
echo ======================================
del /Q obj\*.wixobj >nul 2>&1
echo.
echo ======================================
echo Compilando arquivos WiX
echo ======================================
"%WIX%\candle.exe" -ext WixUIExtension *.wxs -out obj\
if errorlevel 1 goto erro
echo.
echo ======================================
echo Gerando MSI
echo ======================================
"%WIX%\light.exe" obj\*.wixobj -ext WixUIExtension -out bin\Pacote.msi
if errorlevel 1 goto erro
echo.
echo MSI criado com sucesso
goto fim
:fim
pause
Já no arquivo Product.wxs coloque :
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product
Id="*"
Name="NOME DA SUA EMPRESA"
Language="1046"
Version="1.0.0.0"
Manufacturer="SIGLA DA SUA EMPRESA"
UpgradeCode="ID GERADO NO POWERSHELL"
Codepage="65001">
<Package
InstallerVersion="500"
Compressed="yes"
InstallScope="perUser" />
<!-- UI Interface -->
<WixVariable Id="WixUIBannerBmp" Value="Images\WixUIBanner.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="Images\WixUIDialog.bmp" />
<WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
<UI>
<!-- EXEMPLOS DE UI's
<UIRef Id="WixUI_Minimal"/>
<UIRef Id="WixUI_InstallDir"/>
<UIRef Id="WixUI_Advanced"/>
-->
<UIRef Id="WixUI_Minimal"/>
</UI>
<!-- ICON -->
<Icon Id="PackageIcon" SourceFile="Images\logo.ico" />
<Property Id="ARPPRODUCTICON" Value="PackageIcon" />
<MediaTemplate EmbedCab="yes"/>
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- PARA PODER CRIAR ATALHO NA AREA DE TRABALHO-->
<Directory Id="DesktopFolder"/>
<Directory Id="LocalAppDataFolder">
<Directory Id="INSTALLFOLDER"
Name="Seu Aplicativo">
<Component Id="MainFiles"
Guid="B7A65A31-4A6D-4E0C-9E7A-222222222222">
<!-- Um exemplo para copiar arquivo -->
<File Id="FILEBGINFO" Source="..\Payload\bginfo.bgi" />
<!-- Um exemplo para copiar arquivo e criar atalho -->
<File Id="APPBGINFO" Source="..\Payload\bginfo.exe">
<Shortcut
Id="DesktopShortcut"
Directory="DesktopFolder"
Name="arquivo2"
Description="arquivo2"
WorkingDirectory="INSTALLFOLDER"
Advertise="no"/>
<!-- Um exemplo para criar a chave principal do produto -->
<RegistryKey Root="HKCU" Key="Software\Seu Aplicativo>
<RegistryValue Name="Installed" Type="integer" Value="1" KeyPath="yes"/>
</RegistryKey>
<!-- Um exemplo para criar a chave um registro -->
<RegistryKey Root="HKCU" Key="Software\Microsoft\Windows\CurrentVersion\Run">
<RegistryValue Name="Word" Type="string" Value="winword.exe"/>
</RegistryKey>
<!-- Limpeza na desinstalação -->
<RemoveFolder Id="RemoveInstallFolder"
Directory="INSTALLFOLDER"
On="uninstall"/>
<RemoveFile
Id="RemoveDesktopShortcut"
Name="arquivo2.lnk"
Directory="DesktopFolder"
On="uninstall"/>
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="MainFeature" Title="Seu Aplicativo" Level="1">
<ComponentRef Id="MainFiles"/>
</Feature>
<!-- Criando uma Schedule Task -->
<CustomAction
Id="CreateScheduledTask"
Directory="TARGETDIR"
Execute="immediate"
ExeCommand='schtasks.exe /Create /F /TN "NOME DA TAREFA AGENDADA" /SC MINUTE /MO 15 /TR "\"[#ARQUIVO2]\" --file [FILEBGINFO]"'
Return="check"/>
<!-- Removendo a Schedule Task quando desinstalar -->
<CustomAction
Id="DeleteScheduledTask"
Directory="TARGETDIR"
Execute="deferred"
Impersonate="yes"
ExeCommand='schtasks.exe /Delete /TN "NOME DA TAREFA AGENDADA" /F'
Return="ignore"/>
<InstallExecuteSequence>
<Custom Action="CreateScheduledTask" After="InstallFiles">NOT Installed</Custom>
<Custom Action="DeleteScheduledTask" Before="RemoveFiles">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
</Product>
</Wix>
Crie no wordpad o arquivo License.rtf com o seguinte conteúdo:
CONTRATO DE DIREITO DE USO
Esse software possui direitos de uso, ao instalar este software voce concorda com os termos abaixo.
Este software e corporativo e o autor nao se responsabiliza por danos decorrentes do uso ou da impossibilidade de uso deste software.
A instalacao e o uso deste software implicam na aceite destes termos.
Caso nao concorde com estes termos, cancele a instalacao.
Agora abra o CMD, execute o comando Build.cmd , se os arquivos estavam na pasta confirme o status de sucesso na criação do MSI e em seguida teste em seu ambiente. Não se esqueça de verificar tudo o que precisa ser ajustado durante o teste desse pacote, antes de colocar em produção.
Como você deve ter percebido, nesse arquivo será o conteúdo necessário para gerar o pacote MSI, deixei alguns exemplos para que lhe facilite alterar conforme sua realidade.
Fontes/Referências
NVLAN – Página de GitHub
NVLAN – Como criar um pacote MSI
https://github.com/wixtoolset/wix3/releases
Mais Informações
Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.
Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.
