Por que os instaladores do Windows (arquivos .msi) levam muito mais tempo para serem desinstalados do que outros instaladores?

31

Desde os dias do Windows XP, o Windows Installer (arquivos .msi), incluindo os instaladores do InstallShield (que é apenas um bootstrap para MSI) levou cerca de cinco vezes mais tempo para desinstalar um aplicativo do que outros instaladores. O mesmo também é geralmente verdadeiro sobre a instalação.

Por que eles ainda demoram tanto e por que as pessoas ainda usam o MSI para instalar? Por exemplo:

Uninstall VLC - takes around 5 seconds.
Uninstall XYZ - launches "Preparing to remove..." followed by a 15 second delay.

Tudo o que ele faz é remover arquivos e limpar o registro (que pode incluir registros COM), então por que demora tanto?

    
por Chris S 19.09.2009 / 13:46

4 respostas

32

O instalador do Windows primeiro cria sistematicamente um ponto de restauração do sistema, que é uma operação bastante lenta.

Também do artigo intitulado, apropriadamente, "O Windows Installer é uma droga" , um trecho:

It used to be that installation would consist of a program executing and taking a few simple steps to install your software, then do the reverse on uninstallation.

That's not how Windows Installer works. Instead of running a program to simply install and let it be done with, it examines the state of your system, then examines the state of the database that is the program's installer, then does a series of overcomplicated calculations about how to reconcile the two.

It seems that, instead of running an installation script, it goes about solving a traveling salesman problem. Which is why it runs so slow. Or at least, that's my impression.

Eu também adiciono que o instalador do Windows mantém todas as informações no registro, que não é o banco de dados mais rápido do mundo.

    
por 19.09.2009 / 14:18
19

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.

    
por 19.09.2009 / 14:47
6

O instalador do Windows tem muitas vantagens para a implantação corporativa , algumas das quais descrevi aqui: link

Grande parte da lentidão de uma sessão do Windows Installer se deve a seus recursos de reversão . Primeiro, ele cria um ponto de restauração antes de instalar ou desinstalar (desde que a restauração do sistema não tenha sido desativada). Em seguida, ele fará o backup de todos os arquivos afetados durante a desinstalação e a instalação, para garantir que o sistema possa ser restaurado ao seu estado original caso ocorra um erro.

Outro fator contribuinte é que todos os componentes no MSI serão registrados no registro . Isso envolve alguma sobrecarga .

Para arquivos MSI compilados, também é necessário algum tempo para extrair os arquivos de instalação .

Veja esta resposta para detalhes técnicos para acelerar as instalações do MSI .

    
por 13.06.2011 / 05:41
3

Os Windows Installers são usados com frequência por vários motivos - integração com sistema operacional, políticas de segurança, instalações autônomas e muito mais .

O motivo mais comum em que consigo pensar são as instalações autônomas e as distribuições de rede. Grandes corporações podem facilmente distribuir aplicativos, tendo o arquivo .MSI em uma unidade de rede e, em seguida, apenas chamando um arquivo batch (ou aplicativo de assistente de distribuição) em uma máquina remota para automatizar o processo de instalação.

Embora existam outras opções fora dos arquivos .MSI, há alguns recursos exclusivos que se integram à maioria das versões do Windows que muitos outros instaladores não têm.

E só para você saber - o InstallShield nem sempre é um front-end para arquivos MSI. Eles também têm sua própria solução de instalação proprietária.

    
por 19.09.2009 / 13:57