Um programa que instala sem erro e não abre, um sistema que pede um arquivo DLL que nunca foi copiado e uma versão nova que funciona em uma estação e falha em outra costumam depender do que a instalação deixou no computador. Além dos próprios arquivos, muitos programas dependem de componentes instalados à parte, e a falta de um deles só aparece na primeira execução.
O que um instalador faz
Um instalador copia os arquivos do programa, grava configurações no registro, cria atalhos, registra componentes e, às vezes, instala serviços e dependências. Os formatos mais comuns são estes:
- MSI: o pacote do Windows Installer, com regras padronizadas de instalação, reparo e remoção;
- EXE: um instalador próprio do fabricante, que pode conter um pacote MSI ou seguir regras próprias;
- Pasta copiada: o programa funciona a partir de uma pasta, sem instalador, e as dependências precisam estar presentes no computador.
A instalação para todos os usuários grava em Program Files e na parte do registro que vale para o computador, e por isso exige a permissão de administrador. A instalação só para o usuário atual grava no perfil, em geral dentro da pasta AppData, e o programa não aparece para os outros usuários do computador.
A tela Programas e Recursos, aberta pelo comando appwiz.cpl, lista os programas instalados, com o fabricante, a versão e a data de instalação. Muitos programas oferecem ali a opção Reparar, que reinstala os arquivos e as configurações do registro, em geral sem remover os dados.
As dependências mais comuns
Muitos programas usam componentes que não fazem parte do próprio programa:
- Visual C++: as bibliotecas usadas pelos programas feitos em C e em C++, instaladas por versão e por arquitetura;
- .NET Framework: a plataforma dos programas .NET mais antigos, que acompanha o Windows;
- .NET: a plataforma .NET atual, das versões 5 em diante, instalada separadamente;
- Componentes do fabricante: bibliotecas, drivers e certificados exigidos pelo próprio sistema, listados no manual de instalação de cada versão.
Quando o sistema da loja é executado a partir da pasta compartilhada do servidor da loja, os arquivos do programa estão no servidor, mas as dependências ficam em cada estação. Por isso, o mesmo sistema, aberto da mesma pasta, pode funcionar no balcão 01 e falhar no caixa 01.
O Visual C++
Os pacotes do Visual C++ levam no nome o ano da versão das ferramentas usadas para criar o programa. Um programa feito com a versão 2010 precisa do pacote 2010, e as versões 2013 e anteriores têm pacotes separados, instalados lado a lado. Os programas feitos a partir da versão 2015 usam um único pacote, hoje chamado de Visual C++ v14, que atende as versões de 2015 a 2026.
O nome do arquivo que falta indica o pacote:
MSVCR100.dll: o pacote 2010;MSVCR120.dllouMSVCP120.dll: o pacote 2013;VCRUNTIME140.dllouMSVCP140.dll: o pacote v14, das versões 2015 em diante;api-ms-win-crt-runtime-l1-1-0.dll: o componente de tempo de execução universal do C, que já faz parte do Windows 10 e do Windows 11 e falta no Windows 7 e no 8.1 sem as atualizações.
O pacote precisa ter a arquitetura do programa, e um programa de 32 bits usa o pacote x86, mesmo em um Windows de 64 bits.
O .NET Framework e o .NET
O .NET Framework 4.8 acompanha as versões atuais do Windows 10 e o Windows 11. As versões 4.x se substituem, e a 4.8 atende os programas feitos para as versões de 4.0 a 4.7. O comando a seguir mostra a versão instalada:
reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release: mostra um número de versão, em que um valor a partir de 528040 indica o .NET Framework 4.8 ou posterior.
O .NET Framework 3.5, que também atende os programas feitos para as versões 2.0 e 3.0, é um recurso opcional do Windows, ativado pela tela Recursos do Windows, aberta pelo comando optionalfeatures, ou pelo prompt de comando. A ativação baixa os arquivos pelo Windows Update e, em um computador sem esse acesso, usa a mídia de instalação da mesma versão do Windows:
dism /online /enable-feature /featurename:NetFx3 /all: ativa o .NET Framework 3.5 com os arquivos do Windows Update;dism /online /enable-feature /featurename:NetFx3 /all /source:D:\sources\sxs /limitaccess: ativa o recurso com os arquivos da mídia de instalação, na unidade D.
O .NET atual tem versões que convivem no mesmo computador, e cada programa precisa da versão principal para a qual foi feito, como a 8 ou a 10. Os programas de tela usam o pacote chamado .NET Desktop Runtime, e a falta dele aparece em uma mensagem que pede a instalação do .NET na versão indicada. O comando dotnet --list-runtimes lista as versões instaladas.
Os erros de instalação
Um instalador MSI que falha mostra um número de erro:
- 1618: outra instalação já está em andamento, como uma atualização do Windows, e a nova instalação precisa esperar;
- 1925: falta a permissão de administrador para instalar para todos os usuários;
- 1603: houve um erro fatal durante a instalação, sem a causa na mensagem.
O código 1603 exige o log da instalação, gravado pelo comando a seguir:
msiexec /i pacote.msi /l*v C:\Temp\instalacao.log: instala o pacote e grava um log detalhado no arquivo indicado.
No log, a primeira linha com o valor de retorno 3, Return value 3 nos registros em inglês, marca a ação que falhou, e as linhas logo acima mostram o motivo.
Uma instalação que pede reinicialização deixa arquivos para serem trocados na inicialização seguinte. Outra instalação feita antes da reinicialização pode falhar ou encontrar os arquivos antigos.
A desinstalação
A desinstalação pode deixar pastas de dados, configurações no perfil dos usuários e chaves no registro, e uma reinstalação pode encontrar a configuração antiga. Alguns desinstaladores, ao contrário, apagam a pasta inteira do programa, e por isso a pasta de configuração e os dados ficam preservados em uma cópia antes da desinstalação de um sistema.
No suporte
Diante de um programa que instala e não abre, convém ler o nome do arquivo citado na mensagem, porque ele indica o pacote que falta, e comparar a estação com outra em que o programa funciona. O pacote instalado precisa ter a arquitetura do programa, e uma instalação nova é feita com a permissão de administrador e sem outra instalação em andamento.
Para guardar
- O instalador copia arquivos, grava no registro e pode instalar serviços e dependências.
- A instalação para todos os usuários exige administrador, e a instalação por usuário fica no perfil.
- O nome da DLL que falta indica o pacote do Visual C++, e o pacote v14 atende as versões de 2015 em diante.
- O .NET Framework 4.8 atende os programas das versões 4.x, e o 3.5 é ativado como recurso do Windows.
- As dependências ficam em cada estação, mesmo quando o sistema roda de uma pasta compartilhada.
O sistema da loja, aberto da mesma pasta compartilhada, funciona no balcão 01 e informa no caixa 01 que o arquivo MSVCP140.dll não foi encontrado. O que falta?
O pacote v14 do Visual C++ no caixa 01, na arquitetura do sistema. Os arquivos do sistema vêm do servidor da loja, mas as dependências são instaladas em cada estação, e o balcão 01 já tem o pacote.
A ativação do .NET Framework 3.5 falha em um caixa sem acesso à internet. Por quê?
Porque a ativação baixa os arquivos do recurso pelo Windows Update. Sem esse acesso, o comando dism com a opção de origem usa os arquivos de uma mídia de instalação da mesma versão do Windows.