Desinstalar um ficheiro MSI a partir da linha de comandos sem usar o msiexec

msiexec is command prompt software que instala um programa MSI . Mas eu descobri que você pode instalar um arquivo MSI a partir da linha de comando, apenas digitando o nome do arquivo MSI na linha de comando.

mas para desinstalar o ficheiro MSI, parece que tem de ligar para o programa {[[0]} e dar-lhe um /x ou /uninstall.

Como posso desinstalar um MSI da linha de Comando sem usar a rotina de {[[0]}?

Author: Stein Åsmul, 2009-01-16

7 answers

Resposta Curta: não pode. Use MSIEXEC / x

Resposta longa: quando você executa o arquivo MSI diretamente na linha de comando, tudo o que está acontecendo é que ele executa MSIEXEC para você. Esta associação é armazenada no registro. Você pode ver uma lista de associações (no Windows Explorer) indo para Ferramentas / Opções de pastas / tipos de arquivos.

Por exemplo, você pode executar A.O arquivo DOC da linha de comando, e WordPad ou WinWord irá abri-lo para você.

Se procurar no registo em Vais ver .Os arquivos MSI estão associados com o ProgID " Msi.Pacote". Se você olhar em HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command, você verá a linha de comando que o Windows realmente usa quando você "executar" A.Ficheiro MSI.

 44
Author: Roger Lipscombe, 2009-01-16 10:46:17

Há muitas maneiras de Desinstalar um pacote MSI. Isto pretende ser uma "referência".

Em resumo pode desinstalar através de: msiexec.exe, ARP, WMI, PowerShell, Implantação de Sistemas, tais como SCCM, VBScript / COM Automação, DTF ou por ocultas do Windows, pasta de cache, e algumas outras opções apresentadas abaixo.

([17]) os primeiros parágrafos são importantes. MSI tidbits, então existem 14 seções com diferentes maneiras de Desinstalar um arquivo MSI. Puh.

Secções 1, 2 e 3 são os normal de desinstalação abordagens (e, portanto, recomendado). Pessoalmente, eu uso a opção 3 ou 5 da Seção 3 (ambas as opções com o registro, mas a opção 5 corre silenciosamente também). Se você está muito ocupado, deixe de tagarelar e vá para um desses - ele vai fazer o trabalho.


Se você tem problemas em desinstalar completamente e está à procura de uma alternativa ao msizap depreciado .exe e / ou utilitário de limpeza do instalador do Windows (MSICUU2.exe ), Você pode tentar o novo ferramenta FixIt da Microsoft (ou a página internacional ). Pode aparentemente trabalhar para outros problemas de instalação também.


Se achas que MSI e instalador do Windows é mais problema do que vale, talvez queiras ler sobre Os Benefícios Corporativos do uso de arquivos MSI.


Installscript MSI as configurações geralmente vêm embrulhadas numa configuração .ficheiro exe . Para ler mais sobre os parâmetros a usar para desinstalar tais configurações, por favor veja estas ligações: armadilha.folha de referência exe pdf, Armadilha.exe e Update.parâmetros da linha de comandos exe.


Alguns ficheiros MSI estão instalados como parte de pacotes via mecanismo como Queimar (WiX Toolkit) ou InstallShield Suite projetos. Isto pode fazer desinstalar ligeiramente diferente do que é visto abaixo. Aqui está um exemplo para InstallShield Suite projects .


esteja ciente de que a execução de desinstalar silenciosamente ou interativamente pode causar resultados diferentes (!). Para uma descrição bastante longa de Por Que este é o caso, por favor leia este post: Desinstalar do Painel de controle é diferente de remover .msi


Se lhe for inesperadamente pedido o meio de instalação original ao tentar desinstalar, por favor leia esta resposta: porque é que a MSI requer o original ?ficheiro msi para prosseguir com uma desinstalação? e talvez também a seção 12 abaixo para alguns detalhes técnicos importantes.


Se tiverCCleaner ou ferramentas de limpeza similares instaladas, talvez saltar a secção 11 .


Se a desinstalação falhar inteiramente (não é possível executar), consulte as secções 12 e 13 abaixo para um caminho potencial para "desfazer" a instalação usando restauração do sistema e / ou ferramentas de limpeza.


1. Usando o original MSI

  • se tiver acesso ao MSI original usado para a instalação, pode simplesmente clicar com o botão direito em Windows Explorer e seleccionar Desinstalar .
  • também pode desinstalar através da linha de comandos, como explicado na secção 3.

2. Usando a 'Applet' ARP (Adicionar/Remover Programas)

    Só tenho de mencionar a abordagem normal, embora seja óbvio.
  • Ir iniciar executar appwiz.cpl indique para abrir a 'applet' de Adicionar/Remover Programas (ou carregue em Adicionar / Remover programas no painel de controlo)
  • clique em "remover " para o produto que deseja desinstalar.

3. Utilizar msiexec.linha de comandos exe (directamente ou através de um ficheiro em lote)

  • pode desinstalar através da linha de comandos (cmd.exe), Lote ou mesmo de dentro de um executável como uma operação de consola .
  • você faz isso passando o GUIDdo produto (verifique abaixo para saber como para encontrar este GUID ) ou o caminho para o ficheiro MSI original, se disponível, para msiexec.exe .
  • Para todas as linhas de comando abaixo, pode adicionar /qn a fazer com que a desinstalação corra em modo silencioso. É assim que uma desinstalação é executada quando despoletada a partir da 'applet' de Adicionar/Remover.

    • Opção 1: desinstalação interactiva básica (acesso ao ficheiro MSI original):

       msiexec.exe /x "c:\filename.msi"
      
    • Opção 2: interactivo básico desinstalar via GUID do produto (sem acesso ao ficheiro MSI original- Aqui está como encontrar o GUID do produto - o mesmo link que abaixo):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • Opção 3: desinstalação interactiva com Ficheiro de Registo descritivo :

       msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
      
    • Opção 4: desinstalação interactiva com um ficheiro de Registo descritivo corado (verbose, flush to log opção - write log continuamente, pode ser muito lento):

       msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
      
      • A opção flush para registar torna a desinstalação lenta porque o ficheiro de registo é escrito continuamente em vez de em lotes. Isto garante que nenhum log-buffer é perdido se a configuração falhar.

      • Por outras palavras, active esta opção se a sua configuração estiver a falhar e não existirem informações úteis no seu ficheiro de Registo descritivo . Remova o ponto de exclamação para desligar a opção flush para log e a desinstalação será muito mais rápida. Você ainda obter registro descritivo, mas como indicado algum buffer de log pode ser perdido.

    • Opção 5( recomendado): desinstalação silenciosa com Ficheiro de Registo descritivo-suprimir reinicializações (sem descarga para registo-ver a opção anterior para o que isto significa):

       msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
      

      Explicação rápida dos parâmetros (dado que recomendo esta opção):

       /X = run uninstall sequence
       /QN = run completely silently
       /L*V "C:\msilog.log"= verbose logging at path specified
       {11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
       REBOOT=R = prevent unexpected reboot of computer
      
      Mais uma vez, como encontrar o guid do produto: Como posso encontrar o GUID do produto de uma instalação MSI instalada? (para desinstalar se você não tem o MSI original para especificar no comando desinstalar).
  • Dica de Topo: se criar um ficheiro de registo para a sua desinstalação, poderá localizar os problemas no registo por à procura de "valor 3". Isto é particularmente útil para arquivos verbosos, porque eles são tão, bem, descritivos :-).

  • Como encontrar o GUID do produto para um MSI instalado?

  • várias outras formas descritas aqui (registo, pasta local de 'cache', etc...): procurar a imagem do ficheiro MSI
  • Mais informações sobre o log de installsite.org: Como faço para criar um arquivo de log de minha instalação? - grande visão geral das diferentes opções e também das InstallShield logging.

  • Msiexec (Opções da linha de comandos) - visão geral da linha de comandos do msiexec .exe de MSDN . Aqui está. a versão Technet.

  • 4. Usando a base de Dados em 'cache' na pasta de 'cache' super escondida

    • o MSI remove todas as cabinas (versões mais antigas do Windows) e esconde cada MSI instalado numa pasta de Sistema super-escondida em cada MSI, mostrando a barra de Estado do Windows Explorer (ver -> barra de estado) e, em seguida, selecionando um MSI. O fluxo de resumo do MSI será visível no fundo da janela do Windows Explorer. Ou, como Christopher Galpin aponta para fora, ligue a coluna" comentários " no Windows Explorer e selecione o arquivo MSI(veja este artigo para como fazer isso).
    • Assim que encontrares o MSI certo, carrega no botão direito e vai desinstalar.
    • também podes usar o PowerShell para mostre a localização completa da embalagem em cache local, juntamente com o nome do produto. Na minha opinião, esta é a opção mais fácil.
    • para ligar PowerShell: mantenha a tecla Windows carregada, toque em R, solte a tecla Windows, digite em "powershell" e carregue em OK . Então maximize a janela PowerShell e execute o comando abaixo:
        get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize
    

    Enter image description here


    5. Utilização PowerShell

      um script PowerShell similar, mas mais abrangente disponível no MSDN. Ele permite desinstalar a ser executado em várias máquinas.
    • Entrada acrescentada por Mien:

      $app = Get-WmiObject -Class Win32_Product -Filter "Name = 'YOUR_APP'"
      $app.Uninstall()
      
    • Esta abordagem irá funcionar, mas o acesso à classe WMI Win32_Product irá despoletar uma verificação de consistência de software que é muito lento e em circunstâncias especiais Pode provocar uma auto-reparação MSI. Veja este artigo: Powershell Uninstall Script-Have a real headache

    • Ainda não testei isto, mas parece uma aplicação de$.Desinstall () pode executar o Desinstallstring registrado na configuração de registro da applet ARP. Isto significa que ele pode executar modificar em vez de desinstalar em alguns casos.
    • verifique este tópico para mais detalhes e maneiras de desinstalar via Powershell: Como posso desinstalar uma aplicação usando PowerShell?

    6. Usando a biblioteca de classes .NET DTF (parte de a caixa de ferramentas WiX)

        using Microsoft.Deployment.WindowsInstaller;
    
        public static void Uninstall( string productCode)
        {
          Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
        }
    

    7. Utilizar a API de automação do instalador do Windows


    8. Utilizar a grande actualização do instalador do Windows

    • uma grande actualização do instalador do Windows pode acontecer como parte da instalação de outro ficheiro MSI.
    • uma grande actualização é feita pela identificação de produtos relacionados no MSI's "tabela de actualização". Estas configurações relacionadas são então tratadas como especificado na tabela. Geralmente isso significa que eles são desinstalados, mas a configuração principal também pode ser abortada em vez disso (normalmente usado para detectar versões mais elevadas de sua própria aplicação presente na caixa).

    9. Utilizar um sistema avançado de implantação / sistema de Administração Remota

    • SCCM, Unicenter da AC, Tivoli da IBM , Altiris conjunto de gestão de clientes, e vários outros
    • estas ferramentas apresentam gestão avançada de PC cliente, e isto inclui a instalação e desinstalação de ficheiros MSI
    • estas ferramentas parecem usar uma combinação de msiexec.exe, automation, WMI , etc... e até a sua própria maneira de invocar instalações e desinstalações.
    • Na minha experiência, estas ferramentas apresentam muita "personalidade" e precisas de te adaptar às suas diferentes formas de fazer situacao.

    10. Utilizar WMI-Windows Management Instrumentation


    11. Usando uma ferramenta de terceiros como ccleaner ou similar

    • várias aplicações do Windows apresentam a sua própria interface para desinstalar não apenas pacotes MSI, mas instaladores legados também.
    • Não quero fazer recomendações específicas. (especialmente comerciais), mas o bem conhecido CCleaner apresenta uma interface de desinstalação (e tem uma versão livre). Gostaria ainda de acrescentar que Esta ferramenta sofreu um ataque de malware recentemente. Acho que devemos todos lembrar-nos que até um software inofensivo pode ser injetado com malware nos seus locais de download (ataque FTP).
      • uso virustotal.com para verificar os meus downloads, e também processo Sysinternals Explorer para verificar os processos em execução após a instalação-juntamente com o software de segurança regular (conforme o que estiver disponível).
      • uma quantidade surpreendente de software de "área cinzenta" é geralmente encontrada com esta abordagem (barras de ferramentas, smileys, adware, etc...), juntamente com vários falsos positivos (eles também podem causar problemas como software de segurança bloquear seu acesso ou quarantina-los fazendo um monte de fuzz). E certamente malware verdadeiro também.
      • algumas dicas de utilização para o processo Explorer pode ser encontrado aqui - uma série de tweets-esta ferramenta Process Explorer se conecta a VirusTotal.com para verificar todos os processos em execução interactivamente - só precisa de alguns passos de configuração.
      • devo notar que o Process Explorer fornece uma verificação de assinatura de arquivo, mas nenhuma heurística - tanto quanto eu entendo (sem verificação de operações suspeitas, apenas uma verificação com mais de 60 suites de segurança para arquivos marcados). Você precisa de uma ferramenta de segurança regular para interativo, heurístico online proteccao.
      • Para que conste, acho que algum software de segurança faz fronteira em causar mais problemas falsos positivos do que o malware danifica. Famosas últimas palavras na era do resgate... Isso é uma digressão suficientemente grande, só não quero ver as pessoas a descarregar malware. Faça o seu virustotal.com verifique pelo menos.
      Desinstalação como esta deve funcionar bem. Acho que estas ferramentas mexem com muitas coisas quando tentas a "limpeza" delas. features " though. Use com cuidado. Se você só usar o recurso desinstalar, você deve estar OK.

    12. Usando uma ferramenta de limpeza como msizap ou similar

    • para completar msizap.exe deve ser mencionado apesar de ser depreciado, não suportado e desactualizado . Não deve ser usado em nenhuma versão mais recente do Windows
    • esta ferramenta da linha de comandos (msizap.exe também tinha uma interface gráfica. disponível (MSICU2.exe ). Ambas as ferramentas estão desactualizadas.
    • o uso pretendido destas ferramentas era paralimpar os desinstícios falhados :
      • geralmente para o caso raro em que o MSI em cache com o nome aleatório é erroneamente inexistente e a desinstalação falha por esta razão ao pedir o MSI original
          Este é um problema raro,mas eu próprio o vi. Apenas algumas causas potenciais:
          • interferência com o sistema restaurar ? A restauração de uma imagem anterior do sistema apaga acidentalmente um ficheiro MSI em cache?
          • Aplicações de limpeza mal concebidas a apagar o que não deviam?
      • problemas de design MSI ou um acidente no msiexec.exe no final da instalação durante o registo final do produto? Eu acho isso improvável uma vez que o Cache é feito antes de iniciar a instalação, mas eu tenho visto problemas como este ao desenvolver arquivos MSI.
      • Uma súbita falha de energia? Tambem um pouco improvável devido à proteção embutida no instalador do Windows, mas a perda de energia súbita pode sempre causar resultados inesperados.
    • antivírus ou outro software de segurança a apagar ou a bloquear o acesso ao ficheiro MSI em cache?
    • se estiver a desenvolver um MSI e continuar a reinstalação do teste, poderá activar este problema Se reutilizar o mesmo código de pacote entre compilações (o MSI trata diferentes ficheiros MSI como o mesmo ficheiro, por definição, se o código de pacote for o mesmo - todos os tipos de problemas estranhos resultam). Este é um caso muito especial geralmente visto apenas em computadores usados para o desenvolvimento ou QA.
    • o utilizador ou administrador apaga manualmente os ficheiros MSI da pasta da 'cache' para gravar ou criar o espaço disponível em disco ou apenas para verificar com a configuração do Windows. A pasta é "super escondido" e difícil de Acessar, mas ainda é possível encontrá-lo e excluir arquivos dele.
    • Há certamente outras causas possíveis, mas a lista já está muito comprido e volumoso.
  • também para outros tipos de desinstalações falhadas
  • ele também pode ser usado para zap qualquer instalação MSI, embora isso obviamente não é aconselhável.
  • mais informações: porque é que a MSI requer o original .ficheiro msi para prosseguir com uma desinstalação?
  • esta ferramenta de suporte mais recente (esta ferramenta agora também está desactualizada) pode ser experimentado em recente Versões do Windows se tiver pacotes MSI extintos que necessitem de desinstalação.
  • alguns sugeriram usar a ferramenta ligada aqui por saschabeaumont: desinstalar sem um ficheiro MSI. Se tentar e funcionar, não se esqueça de nos avisar.
  • se você tem acesso ao MSI original que foi realmente usado para instalar o produto, você pode usar isso para executar a desinstalação. Deve ser o MSI exacto que foi usado, e não apenas um similar. um.

  • 13. Utilização repor o sistema ("desfazer da instalação" - último recurso IMHO)

    • isto não é propriamente uma maneira de "desinstalar "mas para" desfazer " a última instalação, ou várias instalações para esse efeito.
    • restaurar através de um ponto de restauração traz o sistema de volta a um anterior estado de instalação (Você pode encontrar demos de vídeo disto no YouTube ou um site semelhante).
    • Note que o o recurso pode ser desativado total ou parcialmente - é possível desativar permanentemente para toda a máquina, ou adhoc por instalação.
    • já vi problemas de instalação novos e insolúveis resultantes de uma restauração do sistema, mas normalmente funciona ok . Obviamente não use o recurso para se divertir. É um último recurso e é melhor usado para rollback de novos drivers ou configurações que acabaram de ser instaladas e que são encontrados para causar problemas imediatos (bluescreen , reinicialização, instabilidade, etc...).
    • quanto mais tempo você voltar, mais retrabalho você vai criar para si mesmo, e quanto maior o risco será. A maioria dos sistemas possui apenas alguns pontos de restauração, e a maioria deles se esticam apenas um mês ou dois, eu acredito.
    • esteja ciente de que a restauração do sistema pode afectar As actualizações do Windows que devem então ser novamente aplicadas-assim como muitas outras configurações do sistema. Além de aborrecimentos puros, isso também pode causar problemas de segurança a ressurgir e você pode querer executar uma verificação de segurança específica na(S) CAIXA (s) - alvo, usando Microsoft Baseline Security Analyzer ou ferramentas semelhantes.
    • Já que mencionei restauração do sistema, acho que devo mencionar ... a última funcionalidade de boa configuração conhecida. Esta funcionalidade não tem nada a ver com desinstalação ou restauração do sistema, mas é a última configuração de arranque que funcionou ou resultou em um sistema em execução. Ele pode ser usado para fazer o seu sistema funcionar novamente se ele bluescreens ou pára durante o arranque. Isso muitas vezes acontece após a instalação do driver.

    14. Funções Do Instalador Do Windows (C++)

    Para ser completo, acho que devemos mencionar o núcleo de tudo-a maneira "down-To-the-metal": as funções API do instalador Win32 Windows . Estas são provavelmente as funções usadas pela maioria, se não todas as outras abordagens listadas acima "sob o capô". Eles são usados principalmente por aplicações ou soluções que lidam diretamente com MSI como um tecnologia.

    Há uma resposta sobre serverfault.com que pode ser interessante como um resumo das diferentes abordagens programáticas para desinstalação (com automação,. net, funções do instalador Win32).

    Em baixo irá encontrar um excerto de C++ que mostra como desinstalar Orca, 10.1.17134.12 por código do produto, usando uma chamada para a função MsiConfigureProductEx . Para desinstalar outro produto, substitua o GUID especificado para prodcode pelo do seu produto. Para encontrar o código do produto Veja esta resposta: Como posso encontrar o GUID do produto de uma instalação MSI instalada?

    A desinstalação acontecerá em modo gráfico completo. Para executar em modo silencioso ou algum outro modo GUI (reduzido, básico, etc...), por favor consulte a função: MsiSetInternalUI .
    #include "pch.h"
    
    #define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
    #include <windows.h>
    #include <msi.h> // Windows Installer
    #include <tchar.h> 
    
    #pragma comment(lib, "msi.lib") // To make code link
    
    int main()
    {
        const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
        const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12
    
        UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);
    
        return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
    }
    

    O excerto foi feito e testado com a última versão de Visual Studio 2017 a partir de setembro de 2018:

    1. crie uma nova "aplicação Windows Console" do Visual C++ => Windows Desktop.
    2. copiar e colar o código acima no seu ficheiro CPP principal (substituindo o que estiver lá).
    3. Deve ser isso para poder executar o código. Talvez definir um ponto de paragem, construir e correr.
      • Cuidado com as mudanças nos modelos padrão em VS2017, e os erros estranhos que podem resultar: há muitos erros para o motor IntelliSense funcionar corretamente.
      • actualização de setembro de 2018 : Os modelos mudaram novamente. Já não vejo a questão acima.
      • a ligação MSDN no código lista as possíveis mensagens de erro devolvidas do msiexec.exe.
     127
    Author: Stein Åsmul, 2018-09-13 21:35:40

    Lembre-se também que uma desinstalação pode ser iniciada usando o comando WMIC:

    wmic product get name --> Isto irá listar os nomes de todos os aplicativos instalados

    wmic product where name='myappsname' call uninstall --> isto vai desinstalar a aplicação.

     30
    Author: themrnutz, 2013-08-01 18:03:28

    A extensão de ficheiro msi é mapeada para msiexec (da mesma forma que se escreve A.o nome do ficheiro txt numa linha de comandos lança o Notepad/default .txt manipulador de ficheiros para mostrar o ficheiro).

    Assim escrevendo em um nome de arquivo com um .a extensão msi realmente executa o msiexec com o arquivo MSI como argumento e toma a ação padrão, install. Por essa razão, desinstalação requer que você invoque msiexec com desinstalação switch para unstall.

     3
    Author: Tuminoid, 2015-09-06 16:59:33
    wmic product get name
    
    Fica com o cmd preso... continua a piscar depois de alguns minutos.

    Em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, se conseguir encontrar a pasta com o nome do software que está a tentar instalar( não o nome com o código do produto), o Desinstalar aponta para o próprio desinstalar da aplicaçãoC:\Program Files\Zune\ZuneSetup.exe /x

     2
    Author: sdaffa23fdsf, 2011-11-10 06:57:25
    Eu tentaria a seguinte sintaxe-funciona para mim.
    msiexec /x filename.msi /q 
    
     1
    Author: Peter Mortensen, 2013-06-17 18:49:30
    Presumo que quando Digitas o ficheiro int.msi na linha de comandos, O Windows está automaticamente a chamar o ficheiro msiexec.msi para ti. Estou a assumir isto porque quando escreves uma foto.png ele traz para cima o visualizador de imagens padrão.
     -1
    Author: smack0007, 2009-01-16 10:46:01