# Cómo gestionar múltiples instaladores (.exe y .msi) de una misma aplicación en Windows

- Link: https://binariocero.com/windows/como-gestionar-multiples-instaladores-exe-y-msi-de-una-misma-aplicacion-en-windows
- Published: 2025-07-05T10:28:49+02:00
- Author: Juan José Fernández Durán

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

En entornos de escritorio o servidores Windows, es común encontrar una misma aplicación
instalada a través de distintos métodos: mediante un instalador `.exe` o mediante
un paquete `.msi`. Esta duplicidad puede generar conflictos, redundancias o confusión
a la hora de realizar mantenimientos, automatizaciones o desinstalaciones.

Este artículo técnico explica cómo identificar y gestionar correctamente estos casos,
dejando solo la instalación deseada y eliminando la redundante.

## Escenario típico

Supón que una aplicación como **7-Zip**, **VLC**, **Git** o cualquier herramienta
administrativa ha sido instalada:

 * Manualmente por un usuario con un `.exe`
 * Y luego desplegada por IT mediante un `.msi` para control centralizado

Esto puede dar lugar a que el sistema tenga **dos entradas** en "Aplicaciones y 
características", o que haya conflictos de versiones.

## Paso 1: Detectar las instalaciones presentes

### 1.1. Desde la GUI

Ve a:

    ```wp-block-preformatted
    Inicio → Configuración → Aplicaciones → Aplicaciones instaladas
    ```

Busca el nombre de la aplicación y revisa si aparece más de una entrada.

### 1.2. Desde PowerShell

Puedes listar las aplicaciones instaladas con:

    ```wp-block-preformatted
    Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -like "*NombreApp*" } | Select-Object Name, Version, IdentifyingNumber
    ```

O para buscar en el registro (más rápido y preciso, ideal para grandes entornos):

    ```wp-block-preformatted
    Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" |Where-Object { $_.DisplayName -like "*NombreApp*" } |Select DisplayName, DisplayVersion, UninstallString
    ```

También consulta la rama de 32 bits si estás en un SO de 64 bits:

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

## Paso 2: Identificar el tipo de instalador

### Diferencias:

 * `.exe` suele tener desinstaladores personalizados (por ejemplo: `uninstall.exe`)
 * `.msi` está registrado con un **GUID (Product Code)** y puede desinstalarse con`
   msiexec`

### Claves:

 * Si ves una línea como `msiexec /x {GUID}`, es `.msi`
 * Si ves una ruta tipo `C:\Program Files\...\uninstall.exe`, es `.exe`

## Paso 3: Desinstalar el instalador no deseado

### A. Desinstalación de `.msi`:

Desde PowerShell o CMD (requiere GUID):

    ```wp-block-preformatted
    msiexec /x "{GUID_DEL_PRODUCTO}" /qn
    ```

Donde `/qn` fuerza el modo silencioso (sin GUI).

### B. Desinstalación de `.exe`:

Ejecuta directamente el desinstalador (cuando disponible):

    ```wp-block-preformatted
    & "C:\Ruta\de\la\aplicacion\uninstall.exe" /S
    ```

Algunas aplicaciones también permiten parámetros como `/quiet` o `/norestart`.

## Paso 4: Validar la instalación restante

 1. Verifica que la aplicación sigue operativa (interfaz gráfica o CLI).
 2. Ejecuta `NombreApp.exe --version` si lo permite, para confirmar que la versión 
    activa es la esperada.
 3. Asegúrate de que solo queda una entrada en "Aplicaciones instaladas".

## Buenas prácticas

 * **Centraliza** instalaciones con `.msi` siempre que sea posible (mejor integración
   con GPO, Intune, SCCM).
 * Usa `.exe` solo cuando el proveedor no proporcione `.msi` o se requieran parámetros
   personalizados no soportados por MSI.
 * Documenta y automatiza los procesos de instalación/desinstalación.
 * Si usas herramientas como **Chocolatey**, **Winget** o **Scoop**, prioriza su
   uso como método único para evitar duplicidad.

## Ejemplo real: Desinstalar Git instalado con `.exe` y dejar solo el `.msi`

    ```wp-block-preformatted
    Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object { $_.DisplayName -like "*Git*" }# Si encuentras la ruta "unins000.exe":& "C:\Program Files\Git\unins000.exe" /S
    ```

## Herramientas útiles

 * `Get-WmiObject`, `Get-ItemProperty`: para auditar
 * `msiexec`: para instalar/desinstalar `.msi`
 * `uninstall.exe`, `unins000.exe`: para `.exe`
 * **Winget**: útil para instalaciones modernas controladas
 * **Chocolatey**: control de versiones, scripts y automatización
