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

Desinstalación de programas de forma silenciosa a través de CMD

¿Hay alguna forma de desinstalar programas sin la interfaz gráfica y haciéndolo a través de CMD?

Respuestas (8)

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

Puede invocar el desinstalador correcto sin conocer el GUID, etc. utilizando WMIC.

Para ver una lista de los nombres de los programas conocidos internamente por Windows:

wmic product get name

Busque el nombre de su producto. Probablemente coincida con el que aparece en el panel de control “Programas y características”, pero no siempre.

Luego puedes usar

wmic product where name="_my_product_name" call uninstall

para realizar la desinstalación, que AFAIK debería ser silenciosa (lo ha sido en mi experiencia, pero pruébalo antes de apostar por ello. El silencio puede depender de cómo fue construido su instalador/desinstalador).

Vea aquí para más información:

También hay documentación de referencia para WMIC en microsoft.com.

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

Cada programa que se instala correctamente según las directrices de Microsoft hace una entrada en el registro en HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. Normalmente, la clave del programa será su GUID, o bien el nombre del programa. Dentro de esa clave habrá una entrada llamada UninstallString. Esta contiene el comando a ejecutar para desinstalar el programa.

Si ya sabe de antemano lo que va a desinstalar, debería ser bastante fácil ponerlo en su archivo por lotes. Sin embargo, la cosa se complica cuando intentas automatizar el proceso. Puedes usar el comando reg para obtener datos del registro, pero devuelve mucho texto alrededor del valor real de una clave dada, lo que hace que sea difícil de usar. Es posible que desee experimentar con el uso de VBscript o PowerShell, ya que tienen mejores opciones para obtener datos del registro en una variable.

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

Si tiene instalado PowerShell 3 (o superior), puede realizar una llamada WMI para obtener todos los programas que se llamen de una manera determinada (o “como” una cosa determinada, para hacer búsquedas con comodines), y luego llamar al método Uninstall para cada uno de ellos:

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

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

Si sabes dónde está el archivo de instalación MSI puedes usar:

Msiexec /uninstall Application.msi /quiet

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

Si un programa utiliza Windows Installer, puede utilizar uno de los siguientes comandos:

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

Sin embargo, es probable que no tenga ni el código del producto ni el archivo MSI original utilizado para la instalación.

Aparte de esto, no hay un comando de desinstalación genérico, ya que los instaladores que no hacen uso del Windows Installer son “desconocidos” por el sistema operativo. Pueden suministrar su propio ejecutable de desinstalación, pero el hecho de que ese ejecutable incluya una forma de ejecutarlo sin GUI depende de cada paquete de software.

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

Mira esto, se trata de usar un lote para encontrar la clave de registro UninstallString del software y luego desinstalar el software de forma silenciosa que es mucho más fiable en comparación con wmic Encontré 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

Un script VBScript le ayudará a desinstalar el programa requerido.

Para usar este script necesitarás el nombre del software que se encuentra en tu registro.

Simplemente introduce el nombre de la aplicación en el script y ejecútalo con privilegios de administrador; desinstalará la aplicación. Pero esto sólo funcionará para una aplicación basada en ventanas; para una instalación independiente o aplicaciones que no hacen una entrada en la cadena de desinstalación del registro, el script no funcionará.

Así que en ese caso tendrás que encontrar otra forma de desinstalar la aplicación.

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

La respuesta correcta es la de arriba, pero para las instalaciones de Windows X64 también tendrá que comprobar:

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