Por que os instaladores do Windows (arquivos .msi) demoram mais tempo para desinstalar do que outros instaladores?

31

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

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

Desinstalar o VLC - leva cerca de 5 segundos.
Desinstalar XYZ - inicia "Preparando para remover ..." seguido de um atraso de 15 segundos.

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

Chris S
fonte
Quero apenas observar que isso só é verdade se você (1) desabilitar o recurso de ponto de verificação de restauração do sistema e (2) for um instalador gigantesco (que não é exclusivo do Windows Installer - eu já vi muitos instaladores lentos do Inno, simplesmente porque são enormes). Os instaladores do Windows instalam e removem-se em (literalmente) alguns segundos. (Por exemplo, o Bootvis é instalado em 3 segundos no meu sistema. Ele é desinstalado na mesma quantidade de tempo. E não, meu sistema também não funciona muito rápido.) A diferença é que o Windows Installer tem muito mais recursos, programas maiores use-o com mais frequência.
Mehrdad
@Mehrdad, você quis dizer (1) ativar a restauração do sistema?
Chris S
Na verdade sim, erro de digitação.
Mehrdad
2
Eu vim aqui porque a desinstalação do MSI estava demorando uma eternidade ... e, na verdade, a razão era que o pop-up Do you want to allow the following program from an unknown publisher to make changes to this computer?estava escondido em segundo plano.
Nicolas Raoul
Veja esta resposta para detalhes técnicos para acelerar instalações MSI: superuser.com/a/296534/11906
Stein Åsmul

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 merda" , um trecho:

Costumava ser que a instalação consistisse em um programa executando e executando algumas etapas simples para instalar o software e, em seguida, faça o inverso na desinstalação.

Não é assim que o Windows Installer funciona. Em vez de executar um programa para simplesmente instalar e deixá-lo pronto, ele examina o estado do seu sistema, examina o estado do banco de dados que é o instalador do programa e faz uma série de cálculos complicados demais sobre como reconciliar os dois.

Parece que, em vez de executar um script de instalação, resolve o problema de um vendedor ambulante. É por isso que corre tão devagar. Ou pelo menos, essa é a minha impressão.

Acrescento também 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.

harrymc
fonte
3
Provavelmente é mais rápido do que o dpkgusado para o banco de dados do pacote (embora, reconhecidamente, o dpkg não armazene tudo nele): /var/lib/dpkg/statusé um arquivo de texto simples que lista todos os pacotes que foram instalados uma vez e que não foram removidos - e eu nem tenho certeza se ele sempre omite os eliminados.
SamB
3
dpkgnão minta para mim com barras de progresso que dizer "Tempo restante: 0 segundos" durante dois minutos, embora ...
LawrenceC
20

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.

Um anão
fonte
4
Além disso, até onde eu sei, o MSI usa transações para tudo o que faz, para que possa sempre fazer uma reversão adequada sempre que uma operação falhar. Provavelmente, isso também não contribui para a velocidade, mas é essencial para a integridade dos dados. (Eu parei de contar quantas vezes eu precisava para limpar depois de um instalador NSIS falhou -.-)
Joey
Agora, eu estou instalando OpenOffice e já tem sido quase uma hora;)
Quiark
Muito informativo. Pelo menos parece que eu recebo erros "Não é possível criar ponto de restauração" (talvez a cotação do ponto de restauração seja atingida?) Nos meus logs msi, portanto, a criação de pontos de restauração não tem a chance de atrapalhar meus tempos de instalação. Independentemente disso, meus tempos de instalação ainda são lentos e, se a pesquisa de valor for tão lenta quanto você diz, suponho que não haja motivo para a Microsoft fornecer uma implementação adicional para informações adicionais de folha / nó na especificação binária do registro para complementar a pesquisa binária.
chaz
> 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. Sim.
Alexei Averchenko 03/03
6

O instalador do Windows tem muitas grandes vantagens para a implantação corporativa , algumas das quais descrevi aqui: https://serverfault.com/a/274609/20599

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 da instalação ou desinstalação (desde que a restauração do sistema não tenha sido desativada). Em seguida, ele fará 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 que contribui é 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 .

Consulte esta resposta para obter detalhes técnicos para acelerar as instalações MSI .

Stein Åsmul
fonte
3

Os instaladores do Windows são comumente usados ​​por vários motivos - integração de sistemas operacionais, políticas de segurança, instalações autônomas e muito mais.

O motivo mais comum em que consigo pensar é nas instalações autônomas e nas distribuições de rede. As grandes corporações podem distribuir aplicativos facilmente, tendo o arquivo .MSI em uma unidade de rede e depois chamando um arquivo em lote (ou aplicativo do 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, existem alguns recursos exclusivos que se integram à maioria das versões do Windows que muitos outros instaladores não possuem.

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.

Avanço
fonte
11
A questão era por que o MSI leva tanto tempo para fazer alguma coisa, comparado com os instaladores .exe puros.
grawity
5
Da pergunta ... "e por que as pessoas ainda usam o MSI para instalar?"
Breakthrough
@ grrawity: tecnicamente, os instaladores msi também podem ser empacotados em exe, mas isso provavelmente está dividindo os cabelos.
Jun2