Desinstalando programas silenciosamente via CMD

30

Existe uma maneira de desinstalar programas sem a interface gráfica e fazer isso via CMD?

    
por kb67 17.01.2011 / 05:15

8 respostas

19

Todo programa que se instala adequadamente de acordo com as diretrizes da Microsoft cria uma entrada de registro em HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall . Normalmente, a chave para o programa será seu GUID, ou então o nome do programa. Dentro dessa chave, haverá uma entrada chamada UninstallString . Contém o comando para executar para desinstalar o programa.

Se você já sabe de antemão o que vai desinstalar, deve ser fácil colocá-lo no seu arquivo de lote. É complicado quando você tenta automatizar esse processo. Você pode usar o comando reg para obter dados do registro, mas ele retorna muito texto em torno do valor real de uma determinada chave, dificultando o uso. Você pode querer experimentar usar o VBscript ou o PowerShell, pois eles têm melhores opções para obter dados do registro em uma variável.

    
por 17.01.2011 / 06:14
26

Você pode invocar o desinstalador correto sem conhecer o GUID, etc. usando o WMIC.

Para ver uma lista dos nomes dos programas como conhecidos internamente pelo Windows:

wmic product get name

Procure pelo nome do seu produto. Ele provavelmente corresponde ao listado no painel de controle "Programas e Recursos", mas nem sempre.

Então você pode usar

wmic product where name="_my_product_name" call uninstall

para executar a desinstalação, que o AFAIK deve manter em silêncio (foi na minha experiência, mas tente antes de apostar o farm nisso. O silêncio pode depender de como o instalador / desinstalador foi construído).

Veja aqui para mais:

Há também documentação de referência para o WMIC em microsoft.com.

    
por 23.07.2014 / 23:33
7

Se você tiver o PowerShell 3 (ou superior) instalado, poderá emitir uma chamada WMI para obter todos os programas nomeados com uma determinada coisa (ou 'gostar' de uma determinada coisa, para fazer pesquisas curinga) e, em seguida, chamar o Uninstall método para cada um deles:

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

    
por 29.12.2015 / 15:56
5

Se você sabe onde está o arquivo do instalador MSI, você pode usar:

Msiexec /uninstall Application.msi /quiet

    
por 17.01.2011 / 05:24
5

Se um programa usa o Windows Installer, você pode usar um dos seguintes comandos:

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

No entanto, você provavelmente não possui nem o código do produto nem o arquivo MSI original usado para a instalação.

Além disso, não existe um comando de desinstalação genérico, pois os instaladores que não utilizam o Windows Installer são "desconhecidos" pelo sistema operacional. Eles podem fornecer seu próprio executável de desinstalação, mas se esse executável inclui uma maneira de executá-lo sem a GUI, depende do pacote de software individual.

    
por 17.01.2011 / 05:23
1

Um script VBScript ajudará você a desinstalar o programa require.

Para usar este script, você precisará do nome do software que está localizado no seu registro.

Basta digitar o nome do aplicativo no script e executá-lo com privilégios de administrador; ele irá desinstalar o aplicativo. Mas isso só funcionará para um aplicativo baseado em janelas; para configuração autônoma ou aplicativos que não criam uma entrada na cadeia de caracteres de desinstalação do registro, o script não funcionará.

Então, nesse caso, você terá que encontrar outra maneira de desinstalar 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, arrSubKeys
For Each subkey In arrSubKeys
    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
    
por 18.03.2015 / 18:36
1

Verifique isso, isso é usando um lote para localizar a chave de registro UninstallString do software e, em seguida, desinstalar o software silenciosamente, o que é muito mais confiável comparado ao wmic que encontrei. link

::It extracts software software GUID, then use the GUID to search the name and version
@echo off
setlocal ENABLEDELAYEDEXPANSION

set SoftwareName=Java 8
set NewVersion=8.0.1720.11
set x86GUID=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
set x64GUID=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set Installer=\dc\sources\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s
REM set Installer=d:\downloads\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s

REM It's faster to first locate the software GUID, then search it's Name, Version & UninstallString
for /f "delims=" %%P in ('reg query "%x86GUID%" /s /f "%SoftwareName%" 2^>nul ^| findstr "HKEY_LOCAL_MACHINE"') do (
  echo %%P
  reg query "%%P" /v "DisplayVersion" 2>nul | findstr /r /c:"  %NewVersion%" >nul && (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo %%B has already been installed
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayVersion" 2^>nul ^|findstr "DisplayVersion"') do echo Version: %%B
    goto :EOF
  ) || (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo Found other version %%B, upgrade in progress
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "UninstallString" 2^>nul ^|findstr "UninstallString"') do (
      echo %%B | findstr /c:"MsiExec.exe"  >nul && (
        set MsiStr=%%B
        set MsiStr=!MsiStr:/I=/X!
        echo !MsiStr! /quiet /norestart
        !MsiStr! /quiet /norestart
        rem %Installer%
      ) || (
        echo None MsiExec Uninstall String %%B
        rem "%%B" /S
      )
    )
  )
)
if not defined MsiStr (
  echo %SoftwareName% not found, install it?
  rem %Installer%
)

endlocal
    
por 01.07.2018 / 00:14
0

A resposta correta está acima, mas para instalações do Windows X64 você também precisará verificar:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
    
por 08.06.2017 / 03:49