domingo, 21 de febrero de 2010

Errores del parser XML de Microsoft (MSXML)

Si, como tanta gente, usáis en vuestros equipos el sistema operativo Microsoft Windows, especialmente la versión XP, es posible que en alguna ocasión os hayáis encontrado con uno o más de los siguientes problemas:
  • La mayoría de WEBs no funcionan correctamente en Internet Explorer. Abajo se ve un triángulo amarillo de advertencia.
  • No funcionan ciertas rutinas de Javascript (en WEBs).
  • No funciona el servicio de Actualizaciones de Windows.
  • En Internet Explorer 7.0 o en Internet Explorer 8.0, obtenemos un error al intentar agregar un motor de búsqueda (por ejemplo, al agregar Google).
  • Algunos drivers de máquinas multifunción HP han dejado de funcionar, saliendo una ventana en blanco o mostrando un error en el momento de escanear o imprimir.
  • El "Visor de imágenes y fax de Windows" produce un error cuando abres el asistente para imprimir una imagen.
  • Cuando abres cualquier archivo de consola de administración de Windows (MMC), es decir, aquellos que tienen extensión ".msc" y que se encuentra en "Herramientas administrativas", se produce un error similar a este:
MMC no puede abrir el archivo C:\WINDOWS\system32\devmgmt.msc.


Esto puede deberse a que el archivo no existe, no es la consola de MMC o fue creado por una versión posterior de MMC. Esto también puede suponer porque no tiene suficientes derechos de acceso al archivo.


Pues bien, todos estos errores suelen ser síntoma de un problema en las bibliotecas DLL que contienen el motor intérprete del protocolo XML, llamado MSXML.

La solución es así de sencilla:

Abrimos un intérprete de comandos yendo a Inicio, "Ejecutar" y escribiendo CMD.EXE.
En la terminal que se abrirá, escribimos el siguiente comando, seguido de :
regsvr32 msxml3.dll

Mostrará el siguiente mensaje:

"DllRegisterServer en msxml3.dll se realizó con éxito."
Es importante que dicho comando se haga con permisos de administrador del equipo. Si por alguna razón este paso falla, puede deberse a que el equipo no tiene instalado el motor MSXML en su versión SP4 o posterior. De ocurrir esto, sólo tenéis que descargarlo de la siguiente dirección:
http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=28494391-052b-42ff-9674-f752bdca9582

Ahora, si teníais abierto Internet Explorer, sólo tenéis que cerrarlo y volverlo a abrir, y voilá!  Todo vuelve a funcionar de nuevo.

En un hacer kafkiano e incomprensible por parte de Microsoft, el sistema operativo Windows mantiene simultáneamente todo el histórico de versiones de dicho motor, pero cada programa usa una distinta.

Estos archivos son los MSXML.DLL, MSXML2.DLL, MSXML3.DLL, MSXML4.DLL y MSXML6.DLL (así como sus respectivos archivos de recursos, MSXML2R.DLL, MSXML3R.DLL, etc.) y normalmente se hallan en la ruta
%WINDIR%\SYSTEM32.
En concreto, el Internet Explorer, y cuya integración con las entrañas del sistema operativo complica más las cosas, usa la versión 3 (cuyo archivo es el MSXML3.DLL).


Sin embargo, son distribuidos por diferentes aplicaciones, como el propio Internet Explorer, los componentes MDAC, el Live, el Visual Studio, el SQL Server 2005, etc. así como por muchas actualizaciones de Windows. A veces, en algún proceso de instalación o desinstalación, dicho archivo queda mal registrado en el sistema, y entonces muchas aplicaciones dependientes del mismo dejan de funcionar. 

Otras fallan de manera indirecta debido a que usan el motor de renderizado del Internet Explorer para mostrar interfaces de usuario en pantalla (este es el caso de algunas herramientas de impresión y escaneo de HP).

En cualquier caso, lo de Microsoft con el parser XML es de traca. Un problema similar, pero con la versión MSXML6.DLL ocurre cuando se instala la versión reducida de SQL Server 2005 (necesaria para Navision y otras aplicaciones) en un Windows XP con SP3, por culpa de un terrible fallo de diseño de Microsoft.

Pero esa, es otra historia.

Saludos.