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
.
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.
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):
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)./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
-
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?
- Há várias maneiras, meu. a forma recomendada é usar o Powershell: Como posso encontrar o GUID do produto de uma instalação MSI instalada?
- 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.
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
- Veja Também esta resposta: como posso encontrar o GUID do produto de um MSI instalado armadilha?
5. Utilização PowerShell
- Há 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)
- Esta opção está incluída para os programadores que entram na implantação e MSI - não é realmente prática como uma"correção rápida". Isso requer que você baixe a caixa de ferramentas WiX - uma estrutura livre para criar ficheiros MSI compilados a partir do código XML ficheiro (s).
- um borrão rápido sobre o WiX e o seu "histórico": instalador do Windows e a criação do WiX . E aqui está o WiX contrastado com outras ferramentas de implantação (comerciais) - (pontos fortes e pontos fracos - Esperemos que o mais objetivo possível).
- O DTF (Fundação Ferramentas de implantação) é distribuído como parte do WiX, como explicado aqui: o código-fonte da Fundação Ferramentas de implantação está disponível?.
- o DTF é essencialmente um net invólucro para a API do instalador Win32 Windows . Elimina toda a necessidade de COM Interop ao trabalhar com o instalador do Windows via automação e é nada menos que uma jóia . net - talvez a biblioteca mais fácil de usar.NET que já vi. Altamente recomendado-ótimo mesmo para o treinamento de estudantes em C#.
- o seguinte fonte do perito MSI Christopher Painter usando C# e DTF. Base.Implantacao.WindowsInstaller é um dos as assembleias DTF. ver as outras assembleias aqui explicadas em serverfault.com:
using Microsoft.Deployment.WindowsInstaller;
public static void Uninstall( string productCode)
{
Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
}
- outra alternativa de Tom Blodget: verificar se a desinstalação foi bem sucedida
- mais informações sobre msiexec.exe versus automatização on: serverfault.com.
7. Utilizar a API de automação do instalador do Windows
- Aqui está uma comunidade. análise desta opção: Windows Installer Automation API community sample
- a API pode ser acedida via automação de programas e chamadas de API C++ (o meu post on serverfault.com)
-
A seguinte fonte adaptada por MSI expert Christopher Painter utilizar VBScript:
Set installer = CreateObject("WindowsInstaller.Installer") installer.InstallProduct "product.msi", "REMOVE=ALL REBOOT=ReallySuppress" Set installer = Nothing
Aqui está outro VBScript para desinstalação por GUID do Symantec: http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry
Desinstalar através do código de actualização & ConfigureProduct .
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
- adicionando apenas para completar. Não se recomendaa utilização desta abordagem, uma vez que é muito lenta
- a a verificação da consistência do software é despoletada sempre que O Win32_Product {[19] } é chamado de cada instalação
- a verificação da consistência é incrivelmente lenta, e ele também pode desencadear um software reparação Veja este artigo: Powershell Uninstall Script-Have a real headache
- , pior Ainda, algumas pessoas relatam seus logs de eventos de enchimento com MsiInstaller EventID 1035 entradas - causada, aparentemente, por consultas WMI para a classe Win32_Product (pessoalmente, eu nunca vi isso).
- A WMICodeCreator.exe ferramenta de criação de código pode ser usado para experimentar
- a instalação pode ser invocada via
Win32_Product.Install
- a desinstalação pode ser invocada via
Win32_Product.Uninstall
- a instalação pode ser invocada via
- amostra MSDN: Uninstall method of the Win32_Product class
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.
12. Usando uma ferramenta de limpeza como msizap ou similar
- para completar
msizap.exedeve 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.exetambé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.
- 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
- 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.
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?
#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:
- crie uma nova "aplicação Windows Console" do Visual C++ => Windows Desktop.
- copiar e colar o código acima no seu ficheiro CPP principal (substituindo o que estiver lá).
-
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.
-
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.
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.
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
msiexec /x filename.msi /q