segunda-feira, 30 de junho de 2014

Como executar / instalar um .msi com Inno Setup



Muitas vezes quando ao distribuir um software, precisamos também incluir nossas dependências no pacote de instalação, como softwares de terceiros, bancos de dados, frameworks, etc. O Inno Setup é uma ferramenta fantástica para esse fim. Com ele é possível criar instaladores para nossas aplicações com bastante eficiência, e até mesmo incluir e executar os instaladores de nossas dependências.

Existem diversas maneiras, a maioria bem simples, de se incluir outro pacote aos nossos instaladores. Porém, quando nossas dependências estão empacotadas em arquivos .msi a história muda. Ao incluir um pacote .msi você vai experimentar diversos sabores de erros durante a execução, e vai gastar muitos neurônios até descobrir que se trata de problemas na execução de pacotes msi pelo Inno Setup.

Apesar de ser uma experiência traumática, existem algumas formas simples para se resolver. Seguem algumas:

1. Incluir o parâmetro Shellexec no comando de execução.


Este parâmetro, de acordo com a documentação, cria uma instancia do prompt para a execução do arquivo. É também necessário caso queira executar outros arquivos, como arquivos do Microsoft Office. Recomendo também  a inclusão do parâmetro waituntilterminated em conjunto com o shellexec, pois seu instalador não esperará o termino da execução de pacotes msi por defaut.

Exemplo:
[Run]
Filename: <Diretório>\seuArquivo.msi; Parameters: /qn; StatusMsg: <Mensagem a ser exibida no instalador durante a execução>; WorkingDir: <Diretório de execução do msi>; Flags: shellexec waituntilterminated

Podem perceber que incluí a seção "Parameters: /qn;". Este costuma ser o parâmetro caso queira que seu pacote msi seja instalado em modo silent, ou seja, não apareça requisitando informações ou qualquer interface visual, apenas instala diretamente.

2. Utilizando o msiexec.exe


Esta é outra maneira que pode ser encontrada na documentação, gera mais ou menos o mesmo resultado e utiliza-se dos mesmos parâmetros do prompt.

Exemplo:
[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\seuArquivo.msi"""
Vejo muitas buscas quanto isso, espero ter ajudado!

3 comentários: