2011-01-17 04:15:36 +0000 2011-01-17 04:15:36 +0000
30
30

Desinstalar programas silenciosamente via CMD

Existe alguma forma de desinstalar programas sem a interface gráfica e de o fazer através do CMD?

Odpowiedzi (8)

26
26
26
2014-07-23 21:33:01 +0000

Pode invocar o desinstalador correcto sem conhecer o GUID, etc., utilizando WMIC.

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

wmic product get name

Procure o nome do seu produto. Provavelmente corresponde ao listado no “Programas e Características” painel de controlo, mas nem sempre.

Então pode usar

wmic product where name="_my_product_name" call uninstall

para realizar a desinstalação, que a AFAIK deveria ser silenciosa (tem estado na minha experiência, mas experimente antes de apostar a quinta nisso. O silêncio pode depender de como o seu instalador/desinstalador foi construído).

Veja aqui para mais informações:

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

19
19
19
2011-01-17 05:14:51 +0000

Cada programa que se instala correctamente de acordo com as directrizes da Microsoft faz uma entrada de registo em HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. Normalmente, a chave para o programa será o seu GUID, ou então o nome do programa. Dentro dessa chave estará uma entrada chamada UninstallString. Esta contém o comando a executar para desinstalar o programa.

Se já souber antecipadamente o que vai desinstalar, deve ser suficientemente fácil colocar isso apenas no seu ficheiro de lote. No entanto, torna-se complicado quando se tenta automatizar esse processo. Pode usar o comando reg para obter dados do registo, mas devolve muito texto em torno do valor real de uma determinada chave, o que dificulta a sua utilização. Poderá querer experimentar a utilização de VBscript ou PowerShell, pois têm melhores opções para obter dados do registo numa variável.

7
7
7
2015-12-29 14:56:33 +0000

Se tiver o PowerShell 3 (ou superior) instalado, pode emitir uma chamada WMI para obter todos os programas com um determinado nome (ou “gostar” de uma determinada coisa, para fazer pesquisas wildcard), e depois chamar o método Uninstall para cada um deles:

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

5
5
5
2011-01-17 04:24:49 +0000

Se souber onde está o ficheiro de instalação do MSI, pode utilizar:

Msiexec /uninstall Application.msi /quiet

5
5
5
2011-01-17 04:23:12 +0000

Se um programa utiliza o Windows Installer, pode utilizar um dos seguintes comandos:

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

Contudo, é provável que não tenha nem o código do produto nem o ficheiro MSI original utilizado para a instalação.

Além disso, não há nenhum comando genérico de desinstalação, uma vez que os instaladores que não fazem uso do Windows Installer são “desconhecidos” pelo sistema operativo. Podem fornecer o seu próprio executável de desinstalação, mas se esse executável inclui uma forma de o executar sem GUI depende do pacote de software individual.

1
1
1
2018-06-30 22:14:12 +0000

Veja isto, isto é usar uma chave de registo UninstallString do software e depois desinstalar o software silenciosamente o que é much mais fiável em comparação com wmic* Encontrei https://community.spiceworks.com/topic/2143980-deploy-or-upgrade-java-8-via-shutdown-script-remove-old-javas

::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
1
1
1
2015-03-18 17:36:56 +0000

Um guião VBScript ajudá-lo-á a desinstalar o programa necessário.

Para utilizar este script irá necessitar do nome do software que se encontra no seu registo.

Basta introduzir o nome da aplicação no script e executá-lo com privilégios de administrador; ele desinstalará a aplicação. Mas isto só funcionará para uma aplicação baseada em janelas; para uma configuração autónoma ou aplicações que não façam uma entrada na cadeia de desinstalação do registo, o script não funcionará.

Então, nesse caso, terá de encontrar outra forma de desinstalar a aplicação.

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
0
0
0
2017-06-08 01:49:09 +0000

A resposta correcta está acima, mas para as instalações do Windows X64 também terá de verificar:

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