O Windows Installer realmente tem uma reputação de ser lento. Existem algumas coisas que contribuem para isso e vou abordá-las abaixo. Mas, em última análise, deve-se perguntar se um, dois ou três minutos é realmente uma questão de disputa ao instalar e desinstalar o software. Levo mais tempo do que isso folheando os canais de TV :)
O registro
Este é o culpado número um. O Windows Installer faz uso pesado do registro para suas operações. À medida que o sistema amadurece, à medida que você instala e desinstala aplicativos e à medida que o registro aumenta ou fica fragmentado, o MSI fica mais lento. O mesmo aplicativo instalará e desinstalará muito mais rapidamente em uma instalação intocada do Windows, do que em um sistema amadurecido. A solução aqui é tentar manter o registro limpo e desfragmentado.
Para limpeza do registro, use uma das muitas ferramentas disponíveis no mercado. Mas para desfragmentar o registro, não posso recomendar NTREGOPT suficiente para otimização de seção interna e PageDefrag para desfragmentação física de arquivos.
A razão pela qual as operações MSI podem ficar lentas no registro tem a ver com a maneira como o MSI as usa. O Windows Installer usa o registro para rastrear quais produtos instalaram quais componentes e em que local foi instalado. Os GUIDs de instalação originais são usados em formato compactado. As informações por instalação sobre instalações podem ser encontradas em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18
, enquanto os dados por usuário são encontrados ao lado HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\
em uma chave inferior e superior com o SID do usuário.
Ambas as chaves podem ser bastante grandes e contêm inúmeras subchaves e valores. Eles controlam produtos, componentes e caminhos-chave de cada aplicativo instalado. Todas essas informações devem ser lidas e processadas para um procedimento de desinstalação correto. No entanto, o formato do registro lista as chaves em ordem alfabética, o que permite pesquisas binárias. Mas os valores não são. Eles são armazenados à medida que são criados, portanto, um procedimento de pesquisa linear deve ser executado. O que diminui o desempenho do algoritmo.
Em suma, o MSI é um método bastante completo e preciso para instalação e desinstalação de software. Mas sofre de sua dependência do registro. O sistema é excelente. É o registro do Windows que deveria ter sido revisado há muito tempo :)
Para obter informações mais avançadas:
Para uma análise aprofundada do que a MSI está fazendo durante cada procedimento de instalação ou desinstalação, consulte este artigo que explica como configurar a depuração do MSI. Ou, para informações menos valiosas, mas ainda valiosas, este é como ativar o log.