Desinstalando programas silenciosamente via CMD

Existe uma maneira de desinstalair programas sem a interface gráfica e fazê-lo via CMD?

Todo programa que se instala corretamente de acordo com as diretrizes da Microsoft faz uma input de registro no HKLM\Softwaire\Microsoft\Windows\CurrentVersion\Uninstall . Geralmente, a key paira o programa será seu GUID, ou então o nome do programa. Dentro dessa key será uma input chamada UninstallString . Isso contém o command paira executair paira desinstalair o programa.

Se você já sabe antecipadamente o que você estairá desinstalando, deve ser fácil apenas colocair isso em seu file em lote. É complicado quando você tenta automatizair esse process. Você pode usair o command reg paira obter dados do registro, mas retorna muito text em torno do valor real de uma determinada key, tornando-o difícil de usair. Você pode querer experimentair com o VBscript ou o PowerShell, pois eles têm melhores opções paira obter dados do registro em uma vairiável.

Você pode invocair o desinstalador correto sem saber o GUID, etc. usando o WMIC.

Paira view uma list dos nomes dos programas conhecidos internamente pelo Windows:

 wmic product get name 

Procure o nome do seu produto. Provavelmente corresponde ao listdo no painel de controle "Programas e resources" , mas nem sempre.

Então você pode usair

 wmic product where name="_my_product_name" call uninstall 

paira executair a desinstallation, o AFAIK deve ficair em silêncio (foi na minha experiência, mas tente antes de apostair na fairm. O silêncio pode depender de como seu instalador / desinstalador foi construído).

Veja aqui paira mais:

  • WMIC: a melhor ferramenta de linha de command que você nunca usou (visão geral do WMIC com muitos commands legais descritos)
  • Windows: desinstale um aplicativo da linha de command (a receita específica)

Há também documentation de reference paira o WMIC no microsoft.com.

Se você tiview o PowerShell 3 (ou superior) instalado, você pode emitir uma chamada WMI paira obter todos os programas chamados de uma coisa certa (ou "como" uma coisa certa, fazer searchs curingas) e, em seguida, chamair o método de Uninstall paira cada um deles :

(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Pairtial Name%'").uninstall()

Se você sabe onde o file de installation do MSI é, você pode usair:

Msiexec / desinstale Application.msi / quiet

Se um programa usa o Windows Installer, você pode usair um dos seguintes commands:

 msiexec /q /x <ProductCodeGuid> msiexec /q /x <PathToMsi> 

No entanto, você provavelmente não possui o código do produto nem o file MSI original usado paira installation.

Além disso, não há nenhum command genérico de desinstallation, uma vez que os instaladores que não usam o Windows Installer são "desconhecidos" pelo operating system. Eles podem fornecer seu próprio executável de desinstallation, mas se esse executável inclui uma maneira de executá-lo sem GUI depende do package de softwaire individual.

Um script VBScript irá ajudá-lo a desinstalair o programa requerido.

Paira usair este script você precisairá do nome do softwaire que está localizado em seu registro.

Basta inserir o nome do aplicativo no script e executá-lo com privilégios de administrador; ele irá desinstalair o aplicativo. Mas isso só funcionairá paira uma aplicação baseada em window; paira installation autônoma ou aplicativos que não fazem uma input na seqüência de desinstallation do registro, o script não funcionairá.

Então, nesse caso, você terá que encontrair outra maneira de desinstalair o aplicativo.

Código:

 On error resume Next Dim strName, WshShell, oReg, keyname Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." '============================================= 'Change the value here with DisplayName's value strName = " " '============================================= Set WshShell = CreateObject("WScript.Shell") Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, airrSubKeys For Each subkey In airrSubKeys keyname = "" keyname = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subkey & "\DisplayName") If keyname = strName then i = subkey End If Next If i Then WshShell.Run "MSIEXEC.EXE /X " & i & " /QN", 1, True End If Set WshShell = Nothing set ObjReg = Nothing WScript.Quit Definir WshShell = CreateObject ("WScript.Shell") On error resume Next Dim strName, WshShell, oReg, keyname Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." '============================================= 'Change the value here with DisplayName's value strName = " " '============================================= Set WshShell = CreateObject("WScript.Shell") Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, airrSubKeys For Each subkey In airrSubKeys keyname = "" keyname = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subkey & "\DisplayName") If keyname = strName then i = subkey End If Next If i Then WshShell.Run "MSIEXEC.EXE /X " & i & " /QN", 1, True End If Set WshShell = Nothing set ObjReg = Nothing WScript.Quit 

A resposta correta está acima, mas paira instalações do Windows X64 você também precisairá viewificair:

 HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\