Descargar e instalar MSXML 6.0 en Windows Server 2019: guía definitiva, verificación y solución de errores

¿Buscas “descargar e instalar MSXML 6.0 en Windows Server 2019”? La respuesta corta: no hace falta descargar nada. MSXML 6.0 ya viene incluido y se actualiza con Windows Update. Aquí tienes cómo comprobarlo, diagnosticar errores típicos y dejar cualquier aplicación funcionando.

Índice

Qué es MSXML 6.0 y cómo se distribuye en Windows Server 2019

MSXML 6.0 es el conjunto de bibliotecas COM de Microsoft para procesar XML, validar con XSD y consumir servicios SOAP/HTTP. En Windows Server 2019 forma parte del sistema operativo: se instala con el propio Windows, se aloja en el almacén de componentes (WinSxS) y se mantiene a través de Windows Update. Por eso no existe un instalador “moderno” independiente para Server 2019, y los paquetes redistribuibles antiguos suelen bloquearse o no aportar nada.

Resumen práctico

  • No descargues MSXML 6.0 para Windows Server 2019: ya está instalado.
  • Comprueba la presencia de las DLL y su versión.
  • Si una app dice que “falta MSXML 6.0”, suele ser un problema de arquitectura (x86/x64), registro COM o componentes dañados. Más abajo tienes un plan de acción.
  • Evita instaladores antiguos (MSXML 6.0 SPx, MSXML 4.0): son legacy y pueden crear conflictos.

Arquitecturas, carpetas y rutas clave

En sistemas x64, System32 aloja binarios de 64 bits y SysWOW64 aloja binarios de 32 bits. Es contraintuitivo, pero es así por compatibilidad histórica. Esta tabla te ayuda a no confundirte:

Tipo de procesoRuta de la DLL de MSXML 6.0Regsvr32 que debes usar
64‑bit (nativo en Server 2019)C:\Windows\System32\msxml6.dllC:\Windows\System32\regsvr32.exe
32‑bit (apps x86 en SO x64)C:\Windows\SysWOW64\msxml6.dllC:\Windows\SysWOW64\regsvr32.exe

Cómo comprobar que MSXML 6.0 ya está instalado

Verificación rápida de archivos

Confirma que existan las DLL en las rutas esperadas:

  • 64‑bit: C:\Windows\System32\msxml6.dll
  • 32‑bit (para apps x86): C:\Windows\SysWOW64\msxml6.dll

Comprobar la versión con PowerShell

(Get-Item "$env:WinDir\System32\msxml6.dll").VersionInfo.FileVersion
Si necesitas la de 32 bits:
(Get-Item "$env:WinDir\SysWOW64\msxml6.dll").VersionInfo.FileVersion

La salida te mostrará el número de versión de la DLL instalada (por ejemplo, 6.30.x.x según el nivel de parches). Si tienes políticas de endurecimiento, ejecuta PowerShell como administrador.

Probar la creación de objetos COM

Comprueba que el registro COM responde correctamente creando objetos típicos de MSXML 6.0:

# Sesión de PowerShell 64‑bit
$dom = New-Object -ComObject "Msxml2.DOMDocument.6.0"
$http = New-Object -ComObject "Msxml2.XMLHTTP.6.0"
$reader = New-Object -ComObject "Msxml2.SAXXMLReader.6.0"
"OK si ves objetos: $($dom.GetType().FullName), $($http.GetType().FullName), $($reader.GetType().FullName)"

Para probar la ruta de 32 bits, lanza C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe y repite el test. Alternativamente, usa VBScript:

Set x = CreateObject("Msxml2.DOMDocument.6.0")
WScript.Echo TypeName(x) 'Debería mostrar "IXMLDOMDocument" o similar

Validar funcionamiento básico

$xml = @'
<root><item id="1"/></root>
'@
$dom = New-Object -ComObject "Msxml2.DOMDocument.6.0"
$dom.async = $false
$null = $dom.loadXML($xml)
if (-not $dom.parseError.errorCode) { "Carga OK: $($dom.xml)" } else { "Error: $($dom.parseError.reason)" }

Qué hacer si una aplicación dice “falta MSXML 6.0”

La mayoría de mensajes de “falta MSXML 6.0” provienen de:

  1. Desajuste de arquitectura: una app x86 busca la DLL en SysWOW64, no en System32.
  2. Registro COM incoherente (entradas dañadas o no registradas).
  3. Componentes del sistema dañados tras una actualización interrumpida o una limpieza agresiva.

Plan de acción recomendado

  1. Verifica la arquitectura de la aplicación. Si es x86, asegúrate de que utiliza msxml6.dll en SysWOW64. En entornos Citrix/RDS mixtos, confirma que el proceso corre en 32 o 64 bits.
  2. Re‑registrar la librería COM (como administrador): REM 64‑bit regsvr32 %windir%\System32\msxml6.dll REM 32‑bit C:\Windows\SysWOW64\regsvr32 %windir%\SysWOW64\msxml6.dll Deberías recibir un mensaje de éxito de DllRegisterServer. Si aparece “msxml6.dll fue cargado, pero la llamada a DllRegisterServer falló con el código 0x80004005/0x8002801C/0x80070005”: revisa permisos, UAC y que la consola esté elevada.
  3. Reparar componentes del sistema (no requiere reinicio salvo indicación): DISM /Online /Cleanup-Image /ScanHealth DISM /Online /Cleanup-Image /RestoreHealth sfc /scannow Si SFC detecta archivos corruptos y los repara, reinicia el servidor y valida de nuevo la app.
  4. Instalar todas las actualizaciones disponibles. MSXML 6.0 se actualiza con los parches acumulativos de Windows. Asegúrate de aplicar el último Servicing Stack Update y el acumulativo mensual. En entornos con WSUS/Intune, sincroniza y aprueba las últimas actualizaciones.
  5. Comprobar que la app realmente pide la versión 6.0. Algunas guías antiguas exigen “MSXML 6.0 SPx” como requisito previo, pero en Server 2019 ya lo tienes incorporado. Evita forzar instaladores legacy.

Errores típicos y cómo resolverlos

La app x86 no arranca aunque msxml6.dll existe

  • Asegúrate de que el proceso se ejecuta en 32 bits (por ejemplo, IIS Application Pool con Enable 32‑Bit Applications = True si la app lo necesita).
  • Re‑registra la DLL con el regsvr32 de SysWOW64 (no con el de System32).

Error de registro COM 0x8002801C / 0x80070005

  • Ejecuta la consola elevada.
  • Deshabilita temporalmente políticas que bloqueen regsvr32 o el acceso al registro (AppLocker, SRP, etc.).
  • Comprueba que no hay antivirus/EDR bloqueando la operación.

Después de actualizar Windows, la app dejó de detectar MSXML 6.0

  • Ejecuta DISM y SFC como se indica más arriba.
  • Verifica entrada por entrada los ProgIDs desde PowerShell:
$progids = "Msxml2.DOMDocument.6.0","Msxml2.XMLHTTP.6.0","Msxml2.SAXXMLReader.6.0"
foreach($p in $progids){ try { [void]([type]::GetTypeFromProgID($p)); "$p = OK" } catch { "$p = Error" } }

El instalador de la aplicación “pide MSXML 6.0” sí o sí

Muchos instaladores antiguos validan buscando un MSI heredado en el Registro o una clave de producto. En Server 2019, esa validación puede ser engañosa. Si el proveedor no actualiza el instalador, la forma más limpia es:

  • Solicitar al proveedor un instalador que detecte por ProgID (p. ej., Msxml2.DOMDocument.6.0) en lugar de buscar un MSI concreto.
  • Evitar “parches” que instalen MSXML 4.0 o paquetes de MSXML 6.0 para Windows viejos: podrían no instalarse o introducir binarios sin soporte.

Comandos útiles de diagnóstico

Listar versiones de msxml6.dll presentes

Get-ChildItem -Path "$env:WinDir\System32\msxml6.dll","$env:WinDir\SysWOW64\msxml6.dll" |
  Select-Object FullName,@{n="FileVersion";e={$_.VersionInfo.FileVersion}},LastWriteTime

Forzar registro COM desde scripts

Start-Process -FilePath "$env:WinDir\System32\regsvr32.exe" -ArgumentList "/s `"$env:WinDir\System32\msxml6.dll`"" -Verb RunAs -Wait
Start-Process -FilePath "$env:WinDir\SysWOW64\regsvr32.exe" -ArgumentList "/s `"$env:WinDir\SysWOW64\msxml6.dll`"" -Verb RunAs -Wait

Probar carga con CREATEOBJECT desde cscript (x86/x64)

REM 64‑bit
cscript.exe //nologo //e:vbscript "%temp%\testmsxml.vbs"

REM 32‑bit
%windir%\SysWOW64\cscript.exe //nologo //e\:vbscript "%temp%\testmsxml.vbs" 

Contenido de %temp%\testmsxml.vbs:

On Error Resume Next
Set d = CreateObject("Msxml2.DOMDocument.6.0")
If Err.Number <> 0 Then
  WScript.Echo "Error: " & Err.Description
Else
  WScript.Echo "OK: " & TypeName(d)
End If

Buenas prácticas en producción

  • Estandariza la comprobación por ProgID y carga real de objetos, no por presencia de un MSI histórico.
  • Automatiza una verificación post‑parcheo que incluya crear Msxml2.DOMDocument.6.0 en 64 y 32 bits.
  • Parchea con los acumulativos mensuales; MSXML 6.0 viaja con ellos.
  • Documenta en tu Runbook qué regsvr32 usar para cada arquitectura (evita mezclar).
  • No desinstales manualmente componentes MSXML incluidos por el sistema. Si limpias WinSxS, usa DISM con parámetros soportados.

Checklist rápido de salud

Antes de abrir ticket con el proveedor de la aplicación, repasa:

  1. ¿Existen msxml6.dll en System32 y, si procede, en SysWOW64?
  2. ¿Se crean con éxito los objetos Msxml2.*.6.0 en PowerShell de 64 y 32 bits?
  3. ¿Se registró la DLL con el regsvr32 correcto (x86 o x64)?
  4. ¿DISM/SFC reportan integridad OK?
  5. ¿El servidor está completamente actualizado (acumulativo + SSU)?

Preguntas frecuentes

¿Puedo “actualizar” MSXML 6.0 instalando un paquete redistribuible?

No es necesario ni recomendable en Windows Server 2019. MSXML 6.0 se mantiene con los parches de Windows. Un MSI antiguo puede rechazar instalarse, crear entradas duplicadas o quedar sin soporte.

¿MSXML 3.0 o 4.0 son necesarios?

Server 2019 incluye componentes de compatibilidad como MSXML 3.0 para apps muy antiguas. MSXML 4.0 está obsoleto y no viene con el sistema; no lo instales salvo que un proveedor lo exija y asuma el riesgo (mejor solicitar actualización de la aplicación).

Mi instalador exige “MSXML 6.0 SP1/SP2/SP3”. ¿Qué hago?

En Server 2019 ya tienes MSXML 6.0 con un nivel equivalente o superior, mantenido por Windows Update. Pide al proveedor que actualice su validación para aceptar la presencia del componente del sistema y/o probar creación de objetos COM.

¿Cómo detecto MSXML 6.0 en una regla de despliegue (SCCM/Intune)?

Usa detección por archivo + versión o por ProgID:

  • Archivo: C:\Windows\System32\msxml6.dll con versión >= la mínima que exijas.
  • ProgID: intentar Msxml2.DOMDocument.6.0 (y, si es necesario, Msxml2.XMLHTTP.6.0) vía script.

¿Es seguro ejecutar regsvr32 msxml6.dll?

Sí, siempre que lo hagas con el ejecutable y la DLL de la misma arquitectura y en consola con privilegios. No necesitas parámetros especiales; evita /u salvo que soporte te lo pida.

¿Dónde mirar si algo sigue fallando?

  • Visor de eventos → Aplicación y Sistema (errores de COM o SideBySide).
  • Registro → presencia de los ProgIDs bajo HKCR (solo lectura para verificar).
  • Process Monitor (si procede) para ver qué ruta intenta abrir la app (System32 vs SysWOW64).

Ejemplo de guion de verificación integral

Este script rápido ejecuta una batería de pruebas en 64 y 32 bits:

$results = [System.Collections.Generic.List[object]]::new()

function Test-ComObject(\[string]\$progId){
try {
\$o = New-Object -ComObject \$progId -ErrorAction Stop
\[pscustomobject]@{ ProgID=\$progId; Success=\$true; Note=\$o.GetType().FullName }
} catch {
\[pscustomobject]@{ ProgID=\$progId; Success=\$false; Note=$\_.Exception.Message }
}
}

64‑bit checks

\$paths64 = "\$env\:WinDir\System32\msxml6.dll"
\$paths32 = "\$env\:WinDir\SysWOW64\msxml6.dll"

\$results.Add((Get-Item \$paths64 | Select-Object @{n="ProgID";e={'File(64)'}},
@{n="Success";e={\$true}},
@{n="Note";e={$\_.VersionInfo.FileVersion}}))
\$dom64 = Test-ComObject "Msxml2.DOMDocument.6.0"; \$results.Add(\$dom64)
\$http64 = Test-ComObject "Msxml2.XMLHTTP.6.0"; \$results.Add(\$http64)

32‑bit checks (solo si existe la DLL x86)

if (Test-Path \$paths32) {
\$results.Add((Get-Item \$paths32 | Select-Object @{n="ProgID";e={'File(32)'}},
@{n="Success";e={\$true}},
@{n="Note";e={$\_.VersionInfo.FileVersion}}))
}

\$results | Format-Table -AutoSize 

Para probar la creación de objetos en 32 bits, recuerda lanzar la consola de PowerShell de 32 bits, o ejecutarlo desde un agente x86.

Conclusiones

En Windows Server 2019 no tienes que descargar ni instalar manualmente MSXML 6.0: ya viene integrado y se actualiza con Windows Update. Cuando una aplicación no lo “ve”, céntrate en tres frentes: arquitectura correcta (x86/x64), registro COM coherente y buena salud del sistema (DISM/SFC + parches). Evita instaladores legacy: no aportan valor en 2019 y pueden generar más problemas que soluciones. Con las comprobaciones y comandos de esta guía, deberías poder validar en minutos que MSXML 6.0 está operativo y, si no lo está, repararlo de forma segura.

Anexo: comandos de referencia

AcciónComandoCuándo usarlo
Ver versión DLL x64(Get-Item "$env:WinDir\System32\msxml6.dll").VersionInfo.FileVersionAuditoría rápida de versión
Ver versión DLL x86(Get-Item "$env:WinDir\SysWOW64\msxml6.dll").VersionInfo.FileVersionApps x86 en SO x64
Registrar DLL x64regsvr32 %windir%\System32\msxml6.dllReparar registro COM 64‑bit
Registrar DLL x86C:\Windows\SysWOW64\regsvr32 %windir%\SysWOW64\msxml6.dllReparar registro COM 32‑bit
Reparar imagenDISM /Online /Cleanup-Image /RestoreHealthCorrupción de componentes
Comprobar archivossfc /scannowValidar integridad del sistema

Recordatorio clave

Si una guía antigua “exige” instalar MSXML 6.0 SPx en Windows Server 2019: no es necesario. El componente ya está incorporado y se mantiene mediante Windows Update. Concéntrate en verificar rutas, arquitectura y registro COM, y mantén el servidor al día con los parches.

Scripts de bolsillo (para copiar/pegar):

# Versiones
(Get-Item "$env:windir\System32\msxml6.dll").VersionInfo.FileVersion
(Get-Item "$env:windir\SysWOW64\msxml6.dll").VersionInfo.FileVersion

Re‑registro (admin)

regsvr32 \$env\:windir\System32\msxml6.dll
\$env\:windir\SysWOW64\regsvr32.exe "\$env\:windir\SysWOW64\msxml6.dll"

Reparación

DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow 

Esta guía está pensada para administradores de Windows Server 2019 que necesitan una respuesta clara y accionable sobre MSXML 6.0. Si gestionas granjas RDS/IIS o servidores de aplicaciones donde conviven procesos x86 y x64, imprime la tabla de rutas y pegála en tu Runbook: te ahorrará horas de diagnóstico.

Índice