Desinstalar un programa desde el registro o PowerShell
Todo programa instalado deja en el registro un comando para desinstalarlo. Cuando Configuración → Aplicaciones no consigue quitarlo, o cuando hay que hacerlo en modo silencioso, ese comando es la solución.
Dónde guarda Windows los comandos de desinstalación
Los programas instalados para todos los usuarios están en HKLM; los de 32 bits en un Windows de 64 bits, en WOW6432Node; y los instalados solo para el usuario actual, en HKCU. Cada programa tiene una subclave con DisplayName, DisplayVersion, UninstallString y, a menudo, QuietUninstallString.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\UninstallHKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallListar los programas instalados con PowerShell
Estas líneas leen las tres ubicaciones y muestran el nombre, la versión y los comandos de desinstalación.
$keys = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*"Get-ItemProperty $keys | Where-Object DisplayName | Select-Object DisplayName, DisplayVersion, UninstallString, QuietUninstallString | Sort-Object DisplayNameEjecutar el comando de desinstalación
Si existe QuietUninstallString, quita el programa sin hacer preguntas. Si no, se ejecuta UninstallString añadiendo el parámetro silencioso del tipo de instalador (/S en NSIS, /VERYSILENT en Inno Setup). En los paquetes MSI el nombre de la subclave es el ProductCode, y msiexec /x los elimina.
msiexec /x {PRODUCT-CODE-GUID} /qn /norestart"C:\Program Files\App\uninstall.exe" /SO dejar que lo haga winget
winget busca los programas en esas mismas claves del registro, también los que no instaló él, y ejecuta su desinstalador.
winget listwinget uninstall --name "Nombre del programa"Si falta el desinstalador
Si el archivo del desinstalador se borró, lo habitual es que reinstalar la misma versión lo repare; después el programa se puede quitar con normalidad. Una entrada del registro solo debe borrarse a mano cuando los archivos del programa ya no existen, y conviene exportar la clave antes.
Preguntas frecuentes
¿Por qué un programa no aparece en Configuración → Aplicaciones?
Configuración solo muestra las entradas que tienen DisplayName y no están marcadas como componentes del sistema. Los programas portables no registran nada: se quitan borrando su carpeta.
¿Qué es el ProductCode de un MSI?
Un GUID que identifica un paquete MSI concreto. Es el nombre de la subclave del programa bajo …\Uninstall y aparece en la página de instalación silenciosa de cada programa MSI en ExeAtlas.