En sistemas Windows, muchas aplicaciones instaladas mediante archivos .msi
quedan registradas en el sistema con un identificador único llamado Product Code GUID. Este identificador permite realizar acciones como la desinstalación silenciosa desde línea de comandos o scripts, sin depender de rutas fijas o interfaces gráficas.
Este artículo técnico detalla cómo identificar el GUID de una aplicación y cómo usarlo para desinstalarla de forma automatizada y controlada.
¿Qué es el Product Code GUID?
El GUID (Globally Unique Identifier) es un identificador único que asigna Windows Installer a cada paquete .msi
instalado. Se utiliza para gestionar tareas como:
- Actualización
- Reparación
- Desinstalación
Ejemplo de GUID:
{23170F69-40C1-2702-0920-000001000000}
Paso 1: Identificar el GUID de una aplicación instalada
Opción A: PowerShell con Win32_Product
Get-WmiObject -Class Win32_Product |
Where-Object { $_.Name -like "*NombreDeLaApp*" } |
Select-Object Name, IdentifyingNumber
IdentifyingNumber
es el GUID.
Nota: Win32_Product
puede desencadenar una reconfiguración de los paquetes MSI instalados. No es ideal para producción.
Opción B: Consultar el Registro de Windows (recomendado)
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" |
Where-Object { $_.DisplayName -like "*NombreDeLaApp*" } |
Select DisplayName, DisplayVersion, UninstallString
Para sistemas de 64 bits que tienen instaladores de 32 bits:
Get-ItemProperty "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" |
Where-Object { $_.DisplayName -like "*NombreDeLaApp*" }
Busca si el valor UninstallString
contiene:
msiexec /x {GUID}
Paso 2: Desinstalar usando el GUID
Una vez identificado el GUID de la aplicación, puedes desinstalarla con el siguiente comando:
msiexec /x {GUID} /qn
Parámetros útiles:
/x
→ desinstalación/qn
→ modo completamente silencioso (quiet + no UI)/norestart
→ evita reinicios automáticos
Ejemplo:
msiexec /x {23170F69-40C1-2702-0920-000001000000} /qn /norestart
Automatización por script
Puedes automatizar esta operación para múltiples aplicaciones:
$apps = @(
"{GUID-UNO}",
"{GUID-DOS}",
"{GUID-TRES}"
)
foreach ($guid in $apps) {
Start-Process "msiexec.exe" -ArgumentList "/x $guid /qn /norestart" -Wait
}
Casos de uso
- Despliegue masivo de desinstalaciones con GPO, Intune, SCCM o scripts de login.
- Limpieza de versiones obsoletas antes de instalar una nueva.
- Reparaciones automatizadas eliminando e instalando de nuevo un MSI dañado.
- Inventario de software y gestión de cumplimiento (compliance) en entornos regulados.
Recomendaciones
- Siempre verifica el GUID exacto antes de desinstalar (puede variar según la versión del software).
- Si no tienes acceso a PowerShell, puedes buscar manualmente en el Registro (
regedit.exe
) en:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
- Usa
msiexec /x
solo para paquetes instalados con.msi
. Para.exe
, usa su propio desinstalador.
Validación tras la desinstalación
Después de ejecutar el comando, valida que la aplicación ha sido correctamente eliminada:
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" |
Where-Object { $_.DisplayName -like "*NombreDeLaApp*" }
Herramientas complementarias
- Winget: Para instalar/desinstalar apps modernas (requiere Windows 10 1809+)
- Wmic: Comando heredado útil:
wmic product where "name like '%%AppName%%'" call uninstall /nointeractive
- SCCM, Intune, PDQ Deploy: Para orquestar tareas en entornos empresariales