# Desinstalación de aplicaciones en Windows usando el GUID del producto (Product Code)

- Link: https://binariocero.com/windows/desinstalacion-de-aplicaciones-en-windows-usando-el-guid-del-producto-product-code
- Published: 2025-07-05T10:33:22+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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:

    ```wp-block-preformatted
    {23170F69-40C1-2702-0920-000001000000}
    ```

## Paso 1: Identificar el GUID de una aplicación instalada

### Opción A: PowerShell con `Win32_Product`

    ```wp-block-preformatted
    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)

    ```wp-block-preformatted
    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:

    ```wp-block-preformatted
    Get-ItemProperty "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" |Where-Object { $_.DisplayName -like "*NombreDeLaApp*" }
    ```

Busca si el valor `UninstallString` contiene:

    ```wp-block-preformatted
    msiexec /x {GUID}
    ```

## Paso 2: Desinstalar usando el GUID

Una vez identificado el GUID de la aplicación, puedes desinstalarla con el siguiente
comando:

    ```wp-block-preformatted
    msiexec /x {GUID} /qn
    ```

Parámetros útiles:

 * `/x` → desinstalación
 * `/qn` → modo completamente silencioso (quiet + no UI)
 * `/norestart` → evita reinicios automáticos

### Ejemplo:

    ```wp-block-preformatted
    msiexec /x {23170F69-40C1-2702-0920-000001000000} /qn /norestart
    ```

## Automatización por script

Puedes automatizar esta operación para múltiples aplicaciones:

    ```wp-block-preformatted
    $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:

    ```wp-block-preformatted
    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
