El error: “No se tiene acceso al servicio de Windows Installer…”; Process Monitor, WinDiff y su solución.

LogoBlogWithSlogan

¡Hola nuevamente!

Quisiera contar como un Off-topic que estoy muy contento con las últimas máquinas virtuales con las que he tratado de trabajar porque me han dado la oportunidad de darme un poco más de aprendizaje que he tratado de compartir aquí.

A continuación detallaré otro problema que no es demasiado común pero suele pasarle a varias personas, como siempre seguiré la línea de: El problema, la causa y su solución.

*Nota: Para los que tengan el inconveniente y no deseen ver el desarrollo de todo el artículo para solventarlo pueden ir directamente a “La solución” en la última parte del artículo y seguir los pasos.

El problema

El error empezó cuando estaba tratando de instalar un paquete .MSI (Windows Installer) del Cliente de Windows Intune en una de las máquinas para que fuera reconocido por la Consola de administración (Espero pronto tratar algunos temas de estos).

Cuando le di doble clic para iniciar la instalación, obtenía este mensaje de error:


MSI1

No se tiene acceso al servicio de Windows Installer. Esto puede suceder si Windows Installer no está correctamente instalado. Póngase en contacto con el personal de soporte técnico para obtener ayuda”.

En Inglés, el mensaje sería similar al siguiente:

The Windows Installer Service could not be accessed. This can occur if the Windows Installer is not correctly installed. Contact your support personnel for assistance”.


*Nota: El mensaje de error puede variar con algun código de error incluido, pero suelen referirse a lo mismo.

No tenía idea a qué se podría deber este problema porque ni en física ni en virtual acostumbro a instalar aplicaciones de mantenimiento que suelen ser las primeras causantes de estos inconvenientes pero como había utilizado tanto la máquina en los anteriores contenidos, probáblemente “algo” había hecho. Aunque algo había visto del problema en los Foros, quería aprovechar la oportunidad para tratar de investigarlo y solucionarlo, por supuesto, había que hacer uso de la única herramienta que puede dar una completa visión de lo que esté pasando: Process Monitor de Sysinternals.

La causa

Procedí entonces a reproducir el mensaje de error mientras tenía Procmon activo, así cualquier actividad que sucediera mientras me entregaba el mensaje la podría rastrear.

Después de reproducirlo, paré Process Monitor y empecé a buscar algo que me ayudara a identificar la causa del problema pero tuve una gran mala suerte y es que no aparecía nada relacionado con operaciones faltantes o que tuvieran acceso denegado como normalmente lo hace. Lo segundo fue entonces comparar el error y el primer pantallazo que debía salir en un equipo funcional pero de nuevo, nada anormal y de hecho, todas las operaciones relacionadas con Windows Installer las estaban cumpliendo los dos equipos con resultados satisfactorios.

Antes de seguir con Process Monitor, pensé que podría entonces estar el problema relacionado con el servicio propio de Windows Installer, así que abrí la Consola de Servicios en el PC que presentaba el error, pero al buscar Windows Installer me sorprendí con que el Servicio no estaba:

image

Revisé en uno de los equipos funcionales y en efecto, el Servicio debía estar disponible:

MSI4

El Servicio probáblemente entonces no estaba registrado (No sabía cómo se le había perdido), aquí el hecho que al intentar instalar algun paquete no pudiera acceder a éste. Debía encontrar era como volverlo a su funcionalidad.

Volví a Process Monitor y pensé que quizá al correr el paquete en el equipo que corría correctamente, Process Monitor podría darme un poco más de información o por lo menos alguna pista útil.

Empecé parte de la instalación, abrí Procmon y busqué esta vez por el nombre interno del servicio (msiserver) y esta vez, el primer resultado fue la pista contundente:

MSI0

Windows estaba haciendo uso de la función RegOpenKey para abrir la clave:
HKEY_LOCAL_MACHINESystemCurrentControlSetservicesmsiserver

Después de esto empezaba a realizar consultas a varios de sus valores, unos con buen resultado y otros no tanto, pero como era en el equipo funcional era totalmente normal. Por último cerraba completamente la clave que había abierto (msiserver).

Bajo esta clave están alojados todos los Servicios de Windows, como éste de Windows Installer está establecido a manual, probáblemente estas operaciones incluían la inicialización y su respectivo trabajo, el problema era que bajo la Consola de servicios del equipo con el error no aparecía el Servicio, al no aparecer no podía hacer la consulta, al no poder hacer la consulta no podía proceder con la instalación y era cuando da el molesto mensaje.

Ahora, como estos son claves y valores de Registro, debía ver qué sucedía en el equipo con el problema, procedí entonces a abrir el Editor de Registro, navegué esta la clave y me encontré con esto:

MSI3

Habían algunos valores pero en ninguna parte hacía referencia al Servicio de Windows Installer (msiserver), abrí la misma clave en el equipo funcional y esta fue la grata sorpresa:

MSI2

A parte del valor ImagePath que referencia la ruta del Servicio, era obvio que en el equipo que presentaba el problema hacían falta varios valores más, por ahí podría estar el problema.

Comparando con WinDiff

Leyendo el fantástico libro de Sysinternals Administrator’s Reference de Mark Russinovich y Aaaron Margosis; entre uno de los problemas que precísamente había documentado aquí hace ya algun tiempo sugerían utilizar WinDiff cuando se tratara de hacer comparación de archivos.

WinDiff, es una herramienta incluida en el SDK de Windows, entre todos los tipos de archivo plano que permite comparar, se encuentran los de Registros de Windows.

Aproveché esta gran característica, además de que tenía WinDiff instalado, así que exporté las dos claves de Registro, tanto del equipo funcional como del no funcional, abrí WinDiff fui al menú File y seleccioné Compare files…

image

Lo siguiente es abrir los dos ficheros a comparar y en unos segundos, WinDiff entregará un resultado preciso de la diferencia entre lo que hayamos puesto a comparar. Para este caso, el resultado fue el siguiente:

image

*Nota: Hacer clic en la imagen para verla en tamaño completo.

Normalmente, WinDiff diferencia el contenido de los dos archivos asignándoles un color, por lo general Rojo y Amarillo, o bien Rojo y negro, entre otros.

Cuando sólo aparece un sólo color, y el signo de <! , indica que cada una de esas lineas difiere del archivo contra el que se está comparando

Para este caso, ya podía estar seguro de que hacía falta los valores: ImagePath, ObjectName, Start, Type, ServiceSidType y RequiredPrivileges.

Esto por supuesto, abría de nuevo la esperanza de solucionar el problema.

La solución

Ya sabía la causa, y como en la mayoría de las ocasiones, probáblemente el volver a importar estos valores o bien a crearlos me podría solventar el problema.

Lo que hice sin embargo, fue exportar toda la clave de:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesmsiserver

A continuación, la pasé al equipo que presentaba los problemas, la ejecuté, la importé y como el error persistía, procedí a reiniciar el equipo.

Después del reinicio, intenté ejecutar el paquete de instalación y ¡Problema solucionado! Bastaba con reiniciar para que el Servicio se volviera a registrar e hiciera el trabajo que le correspondía al momento de su llamado.

La razón por la que detallara tan rápido la solución es que aproveché este inconveniente también para automatizar el proceso.

Para las personas que vean este artículo entonces y tengan este mismo problema, les dejo dos alternativas:

Solución automática: Presentando FixMSI

image

FixMSI, es una pequeña aplicación que he desarrollado utilizando la API de Windows, utiliza las función RegKeyCreateKeyEx para crear el valor de msiserver en la ubicación correspondiente y luego hace uso de la función RegSetValueEx para establecer todos los valores correspondientes y que requiere el Servicio de Windows Installer para funcionar.

Por último, FixMSI reinicia el equipo para que todos los cambios surtan efecto y que cualquier paquete (.MSI) se pueda instalar sin obtener el error.

Este proceso es totalmente transparente para el que ejecute FixMSI, sólo se verá la pantalla de confirmación y la de posterior aviso de reinicio:

FixMSI1

image

*Nota: FixMSI incluye un manifiesto para solicitar la elevación de permisos si está activo el Control de Cuentas de Usuario (UAC).

Pueden descargar FixMSI desde aquí:


Solución manual: Importando Registro

El método anterior es el que personalmente recomiendo porque como ven, es sólo aceptar el mensaje y la aplicación hará el resto de una forma rápida y segura.

Si no llega a funcionar, pueden bajar e importar el archivo de Registro original del Servicio de Windows Installer desde aquí:

Después de esto, reinician manualmente y deberían poder realizar las instalaciones sin problemas.

Espero que esto les pueda servir de ayuda.

Los que prueben FixMSI, les agradecería que me entregaran el feedback comentando en este post para saber si efectivamente les solucionó este problema.

¡Muchas gracias!

Saludos,

Checho

17 comentarios en “El error: “No se tiene acceso al servicio de Windows Installer…”; Process Monitor, WinDiff y su solución.”

  1. Llevo 2 meses con este problema y he probado mil soluciones, de momento probando el FixMSI tampoco ha dado resultado y sigo sin poder hacer la mayoría de las instalaciones

  2. Hola,
    Puede entonces que tu problema lo esté causando algo diferente, ¿Podrías darme el mensaje exacto de error que recibes? Con títulos y código.

    Saludos y gracias.

  3. Hola, si intento desinstalar me sale:

    Windows Installer:
    No se tiene acceso al servicio de Windows Installer. esto puede suceder si Windows Instaler no está correctamente instalado. Póngase en contacto con el personal de soporte técnico para obtener ayuda

    En una instalación en ingles sale:

    The Windows Installer Service could not be accesed. This can occur if your runnig in safe mode, or if the windows installer is not correctly installed. Contact your support personnel for assistance

    – No lo estoy ejecutando en modo seguro como dice el error, y mi problema me parece que ha ocurrido por que se me infectó el pc hace un tiempo. Ya he pasado antivirus, Pero no encuentro el modo de arreglarlo esto. Si entro en servicios locales Windows installer si sale como Iniciado y Manual pero no me responde bien como se ve

  4. Es muy interesante James, aunque el error es igual, el causante no parece ser la ausencia del servicio como está en mi artículo.

    Sin embargo te pido tratemos de forzar el registro de ese serviciio nuevamente, para eso:

    – Haz clic en Inicio, teclea regedit, clic derecho y Ejecutar como administrador

    – Navega hasta la siguiente clave:
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmsiserver

    – Clic derecho y elimina esa clave.

    – Reinicia el sistema.

    – Ejecuta de Nuevo mi aplicación y deja que reinicie el sistema.

    – Intenta instalar nuevamente.

    ¡Coméntame!

  5. Me acabo de dar cuenta de una cosa curiosa, el windows installer una vez iniciado(que no se me inicia nada más entrar en windows,cosa extraña), entro a instalar algo y cuando llega justo el momento en que pasa la barrita para la instalación de un programa, me da el error comentado arriba y automáticamente me se me detiene el windows installer. Voy a servicios y me veo que tengo que iniciarlo otra vez porque se ha detenido solo al querer instalar algo.

    Debo tener algun virus que no he identificado todavía o no sé que pasa, pero el mismo se detiene en cuanto ve una instalación.

  6. Es que el servicio es manual, las aplicaciones lo consumen cuando requieren instalar sólamente pero, haz clic en Inicio, teclea MSCONFIG y ENTER.

    En la ventana de Configuración del sistema, ve a la pestaña General, selecciona inicio de diagnóstico, reinicia el sistema en ese modo y dime si de pronto puedes instalar correctamente.

    Echaré igual un vistazo al registro pero creería que por ahí no va el problema entonces.

  7. Sigue sin funcionar ;/

    Me gustaría poder reinstalar el windows installer si es que eso es posible, pero bueno tu sabrás más, ya me dirás. estaré por aquí

  8. Hola, por lo menos las consultas las hace bien, abre la consola de Servicios, abre Windows Installer, ve a la pestaña de Dependencias y pasa por cada servicio que te muestra, debe estar en Automático cada uno y debe estar corriendo.

    Coméntame.

  9. Checho me has solucionado un enorme problema con esto del WI que no por la falta del .dll no me permitia ni instalar las actualizaciones del windows update pero gracias a ti se soluciono este problema mil gracias mi hermano. desde ciudad de México.

Responder a checho Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *