¿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.
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 proceso | Ruta de la DLL de MSXML 6.0 | Regsvr32 que debes usar |
---|---|---|
64‑bit (nativo en Server 2019) | C:\Windows\System32\msxml6.dll | C:\Windows\System32\regsvr32.exe |
32‑bit (apps x86 en SO x64) | C:\Windows\SysWOW64\msxml6.dll | C:\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:
- Desajuste de arquitectura: una app x86 busca la DLL en
SysWOW64
, no enSystem32
. - Registro COM incoherente (entradas dañadas o no registradas).
- Componentes del sistema dañados tras una actualización interrumpida o una limpieza agresiva.
Plan de acción recomendado
- Verifica la arquitectura de la aplicación. Si es x86, asegúrate de que utiliza
msxml6.dll
enSysWOW64
. En entornos Citrix/RDS mixtos, confirma que el proceso corre en 32 o 64 bits. - 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 deDllRegisterServer
. 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. - Reparar componentes del sistema (no requiere reinicio salvo indicación):
DISM /Online /Cleanup-Image /ScanHealth DISM /Online /Cleanup-Image /RestoreHealth sfc /scannow
SiSFC
detecta archivos corruptos y los repara, reinicia el servidor y valida de nuevo la app. - 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.
- 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
deSysWOW64
(no con el deSystem32
).
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
ySFC
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:
- ¿Existen
msxml6.dll
enSystem32
y, si procede, enSysWOW64
? - ¿Se crean con éxito los objetos
Msxml2.*.6.0
en PowerShell de 64 y 32 bits? - ¿Se registró la DLL con el
regsvr32
correcto (x86 o x64)? - ¿
DISM
/SFC
reportan integridad OK? - ¿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ón | Comando | Cuándo usarlo |
---|---|---|
Ver versión DLL x64 | (Get-Item "$env:WinDir\System32\msxml6.dll").VersionInfo.FileVersion | Auditoría rápida de versión |
Ver versión DLL x86 | (Get-Item "$env:WinDir\SysWOW64\msxml6.dll").VersionInfo.FileVersion | Apps x86 en SO x64 |
Registrar DLL x64 | regsvr32 %windir%\System32\msxml6.dll | Reparar registro COM 64‑bit |
Registrar DLL x86 | C:\Windows\SysWOW64\regsvr32 %windir%\SysWOW64\msxml6.dll | Reparar registro COM 32‑bit |
Reparar imagen | DISM /Online /Cleanup-Image /RestoreHealth | Corrupción de componentes |
Comprobar archivos | sfc /scannow | Validar 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.