O Windows Installer realmente tem uma reputação de ser lento. Há 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 contenção ao instalar e desinstalar o software. Eu levo mais tempo do que isso passando pelos canais de TV:)
O registro
Este é o culpado número um. O Windows Installer faz uso intenso do registro para suas operações. À medida que o seu sistema amadurece, à medida que você instala e desinstala aplicativos, e à medida que o registro aumenta de tamanho ou se torna fragmentado, o MSI se torna mais lento. O mesmo aplicativo será instalado e desinstalado muito mais rapidamente em uma instalação do Windows intocada, do que em um sistema maduro. A solução aqui é tentar manter o registro limpo e desfragmentado.
Para a limpeza do registro, use uma das muitas ferramentas disponíveis no mercado. Mas para a desfragmentação do registro eu não posso recomendar o suficiente NTREGOPT para otimização da 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 a MSI a utiliza. O Windows Installer usa o registro para rastrear quais Produtos foram instalados em quais Componentes e em qual Localização ele foi instalado. Os GUIDs de instalação originais são usados no formato compactado. As informações por máquina sobre as 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 próximos a ela em um HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\
e em uma chave com o SID do usuário.
Essas duas chaves podem ser muito grandes e contêm várias subchaves e valores. Eles controlam produtos, componentes e KeyPaths 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 conforme são criados, portanto, um procedimento de pesquisa linear deve ser executado. O que atrasa 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 de registro. O sistema é excelente. É o registro do Windows que deveria ter sua revisão há muito tempo:)
Para informações mais avançadas:
Para uma análise profunda do que a MSI está fazendo durante cada procedimento de instalação ou desinstalação, consulte este artigo que explica como configurar o MSI Debug. Ou, para informações menores, mas ainda valiosas, este como ativar o registro.