Pergunta

Meu instalador Wix funcionou ao instalar meu programa, mas está quebrado para desinstalação.Um arquivo é removido muito cedo e será necessário mais adiante.O desinstalador falha e reverte suas alterações.

Isso significa que não posso remover o pacote da minha máquina e, portanto, não posso instalar outras compilações do meu instalador (um inconveniente considerável).Como posso forçar a remoção do pacote?

Foi útil?

Solução

Atualização, Stein Åsmul: injetando esta lista mais recente de abordagens de limpeza.


  1. Encontre seu pacote em C:\Windows\Installer, onde o Windows mantém cópias dos pacotes MSI instalados.Os nomes são gerados aleatoriamente, então você terá que olhar as datas de criação dos arquivos.

  2. Abra o arquivo MSI com orca.(Infelizmente não existe um download simples para o instalador do orca.Você pode obtê-lo instalando o "MSI Tools" do SDK do Windows 10, e, em seguida, pesquisando orca.msi em C:\Program Files (x86)\Windows Kits.)

  3. Exclua a ação personalizada ofensiva do Tabela CustomAction

Agora você deve conseguir desinstalar o pacote.

editar:de acordo com a resposta de @ darkrock76 abaixo, a pasta da etapa 1 também pode ser C:\ProgramData\Package Cache\.Eu tenho ambos na minha máquina com Windows 7 SP1.Não consegui encontrar imediatamente documentação sobre isso.


ATUALIZAR:Olá Wim, obrigado pelas boas informações de COM sem registro que você forneceu anteriormente!Algumas atualizações sobre esse problema de desinstalação:A resposta de darkrock76 está incorreta, por favor veja meu comentário para ele abaixo.Além disso, em vez de excluir a ação personalizada na etapa 3 acima, você pode definir sua condição na tabela InstallExecuteSequence como 0 (zero numérico == falso) para evitar que ela seja executada.A exclusão da entrada da tabela de ação personalizada deixa algumas referências de chave estrangeira quebradas (pode falhar em algum momento, eu acho). A ferramenta Microsoft FixIt também pode ser tentado antes de recorrer a este hack.Há algumas ferramentas/editores/visualizadores MSI gratuitos e alternativos (na parte inferior) além do Orca.Talvez o usuário também deva fazer um zip do MSI original antes de editar, mas acho que isso está implícito.Por favor, exclua este comentário confuso assim que obtê-lo - posso escrever um rápido resumo das diferentes maneiras de forçar essas desinstalações se tiver tempo (a ferramenta FixIt MS, usando pequenas atualizações, edite o MSI em cache diretamente, aplique a transformação para o desinstalar e tudo o mais que houver).Continue com a implantação :-).Sua resposta COM sem registro me ajudou bastante (Stein) no passado.Muito obrigado.

E esqueci uma coisa: você pode encontrar o arquivo MSI de cache real usando o Powershell.Isso foi para um pacote, você também pode obter todos os pacotes (role para baixo até a primeira captura de tela).

Outras dicas

Este comando geralmente funciona para mim:

msiexec /fv installer.msi

Ele recupera um pouco o instalador, então você pode tentar novamente com um corrigido.

Uma vez, esse comando não funcionou e tive que usar o Microsoft FixIt.Resolveu o problema (um grande choque para mim).

Dependendo do motivo exato do comportamento descrito, você pode ter pelo menos algumas opções.

Se o motivo da falha for uma ação personalizada executada na desinstalação, e essa ação personalizada estiver condicionada a algumas propriedades que você pode influenciar, você pode tentar passar o valor desejado por meio da linha de comando:

msiexec /x {YOUR-PRODUCTCODE-HERE} RUNMYACTION=false

Nesta amostra RUNMYACTION é uma propriedade do Windows Installer que participa de uma condição de ação personalizada e, se você passar false como seu valor, a ação não será executada.

Caso contrário, você pode corrigir a lógica (ou apenas desabilitar explicitamente a ação personalizada) e construir o novo pacote MSI.Em seguida, faça upload para a máquina de destino e execute assim:

msiexec /i YourPackage.msi REINSTALL=ALL REINSTALLMODE=vomus

Aqui YourPackage.msi é um novo pacote fixo, REINSTALL=ALL instrui o msiexec para reinstalar o produto usando este novo pacote e REINSTALLMODE=vomus (o v parte dele) irá armazenar novamente em cache o pacote MSI e você poderá removê-lo normalmente depois.

Uma nota lateral:você deve testar sua instalação em uma máquina virtual para não arriscar a sua máquina real.

FYI: No Windows 8.1 Os instaladores foram movidos aqui: C: \ ProgramData \ Package Cache \

Geralmente eu apenas procuro <Your Installer's Name>.msi ou <Your Installer's Company Name> no registro e exclua algumas das chaves de desinstalação de alguns dos Products sob as árvores do instalador do Windows e tudo geralmente funciona bem e elegante depois, embora isso SERIA deixe algumas coisas por aí, como instaladores em cache e possivelmente toneladas de outras chaves de registro para cada arquivo instalado, etc.mas é SEMPRE funcionou para mim ao desenvolver instaladores porque, honestamente, quem se importa se um MSI sobrar e for armazenado em cache em algum lugar?Você está usando a máquina para desenvolvimento de qualquer maneira, certo?

Eu usei esta pequena ferramenta também da Microsoft

https://support.microsoft.com/en-us/help/17588/fix-problems-that-block-programas-from-being-Installed-or-removed

Basicamente, esta ferramenta pode ser usada para "reparar problemas, incluindo chaves de registro corrompidas que o bloqueiam de instalar ou remover programas"

O que corrige:

    .
  1. Chaves de registro corrompidas em sistemas operacionais de 64 bits

  2. Chaves de registro corrompidas que controlam os dados de atualização

  3. Problemas que impedem que novos programas sejam instalados

  4. Problemas que impedem que os programas existentes sejam completamente desinstalados ou atualizados

  5. Problemas que o bloqueiam de desinstalar um programa através de adicionar ou remover programas (ou programas e recursos) no painel de controle

  6. Pode ser usado para:

    • Windows 7
    • windows 8
    • Windows 8.1
    • windows 10
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top