Onde o Windows armazena arquivos MSI para desinstalação?

25

Estou tentando descobrir como o Windows (XP a 7) está lidando com a instalação e desinstalação de arquivos MSI. Surgi em situações em que o Windows Installer não pode desinstalar porque está faltando o arquivo MSI original, o que me leva a acreditar que ele armazena uma cópia de todos os pacotes MSI instalados em algum lugar. Onde?

Eu tive algumas teorias.

  1. Ele espera que ele resida na mesma pasta em que foi instalado. As chaves do registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallapontam para a pasta de instalação original e as mensagens de erro quando o arquivo MSI está ausente geralmente apontam para isso. A remoção do arquivo MSI desta pasta não impede o processo de desinstalação, por isso recusei essa teoria.

  2. C:\Windows\Installer. Na verdade, essa pasta contém vários arquivos MSI aparentemente aleatoriamente nomeados. Mas esta lista está incompleta. Eu encontro entradas na chave do registro mencionada em 1) que não possui uma cópia MSI nesta pasta.

Então, como isso funciona? Como o Windows Installer pode desinstalar aplicativos instalados pelo MSI, mesmo que o MSI não esteja em 1) e não em 2)?

Nilzor
fonte
O Windows nem sempre o mantém. Existem várias maneiras de o usuário dizer ao Windows para limpar seu cache desses arquivos. Se você possui um software que não pode ser desinstalado, significa que o desenvolvedor criou o instalador errado. A localização será diferente entre o Windows XP (por que você está preocupado com um sistema operacional sem suporte) e Windows 7 e / ou Windows 8.
Ramhound

Respostas:

44

Aparentemente, funciona assim (no Windows 7, não conheço o XP e outros sistemas operacionais):

Quando um usuário instala algum aplicativo, o Windows faz o seguinte:

1) Cria uma chave do Registro

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [ProductId GUID]

para este aplicativo.

Se você tiver acesso ao arquivo msi original do instalador do seu aplicativo, poderá encontrar o [ProductID GUID] abrindo o arquivo msi no orca.exe e clicando em "Propriedade" à esquerda no orca e procurando "ProductCode" linha à direita. Se você não tiver acesso ao arquivo * .msi original, poderá pesquisar a chave do Registro HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall para obter o nome do aplicativo.

Se você deseja excluir seu aplicativo (que se recusa a desinstalar, por exemplo) da lista de aplicativos instalados no Painel de Controle, você pode excluir a entrada desta chave de Desinstalação. Certamente desaparecerá da lista no painel de controle, mas o Windows ainda se lembrará. Por exemplo, se você tentar instalar uma próxima versão do mesmo aplicativo, o Instalador ainda poderá insistir em desinstalar a versão anterior. Veja o item 2 para isso.

2) O Windows copia o arquivo * .msi original na pasta C: \ Windows \ Installer e o renomeia para um nome aleatório (embora mantenha a extensão .msi). O Windows também cria uma chave no registro no HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[InternalUserId]\Products\[some random guid-like sequence of chars identifying to windows your installation]\InstallProperties.ValueName "LocalPackage" nesta chave de registro apontará para o arquivo msi renomeado. Para localizar o arquivo em C: \ windows \ Installer, você pode navegar para esta pasta no Windows Explorer, alterná-lo para o modo de exibição Detalhes, tornar visível a coluna "Assunto" e visualizar todos os nnnnnnnn.msi que digitam o nome correspondente do produto.

farfareast
fonte
6
Eu queria votar em você duas vezes pelo segredo oculto - make column "Subject" visible and you will see for all nnnnnnnn.msi fies their corresponding name of product.. O Windows é um sistema operacional tão misterioso: P
RBT
3) O passo 3 foi necessário para mim. Eu tive que copiar o arquivo 5188bfc6.msi (hex # .msi) e renomeá-lo para o nome do arquivo original MyApp.msi, antes que o desinstalador aceitasse o arquivo. Após esta desinstalação funcionou bem.
Joe B