El error “80246008” de Windows Update en Windows 7, el Servicio de BITS que no aparecía, KDiff3 y su solución.

hbDkPZaj-El_vs1Vbhreyjl72eJkfbmt4t8yenImKBVaiQDB_Rd1H6kmuBWtceBJ

Windows Update, o Actualizaciones Automáticas en español, es quizá, una de las características más importantes de un sistema operativo Windows, ya que desde aquí, es donde podemos conectarnos cada segundo martes del mes a descargar los nuevos parches y fixes de seguridad que provee Microsoft desde sus servidores; aunque también suelen salir actualizaciones más importantes denominadas ‘Fuera de banda’, que solucionan algún agujero detectado y que puede ser vital para la integridad del sistema operativo.

Hasta aquí todo perfecto, puesto que si mantenemos las actualizaciones activas, y las unimos con algunas buenas prácticas, podemos estar bien protegidos, el problema está cuando Windows Update no funciona correctamente.
Como con cada producto de Microsoft, hay diferentes códigos de error que suelen decir poco o nada, aunque definitivamente, dan una referencia en la gran mayoría de veces precisa hacia dónde puede estar el problema.

Windows Update tiene múltiples código de error que pueden surgir si hay inconvenientes buscando, o instalando actualizaciones, algunos muy bien documentados en las KB de Microsoft, algunos como el de este post, aunque populares e identificados con posibles causas, no lo están.

El problema

En los Foros de Microsoft TechNet, se ha vuelto muy popular un error en Windows Update en Windows 7 (Aunque no necesariamente ligado a esta versión), básicamente, se buscan y listan bien las actualizaciones, pero al momento de darle ‘Instalar ahora’, Windows Update presenta un error muy similar a la siguiente captura de pantalla:

image

El código de error que referencia es: “80246008”, y su mensaje suele ser: “Windows Update encontró un error desconocido”.

Si se le da al enlace de ‘Obtener ayuda con este error”, no es mucho lo que se pueda ver tampoco, sólo un código que referencia al error como: "WindowsUpdate_80246008" "WindowsUpdate_dt000" y algunos problemas relacionados, nada más.

No importa qué actualización se seleccione, siempre dará el mismo mensaje de error, y no se podrá instalar nada.

La causa

Si se busca por el código de error “80246008” en los sitios web de Microsoft, podremos encontrar una documentación en el sitio de Windows, y una KB que hace referencia al problema.

Ambas documentaciones hacen referencia a un Servicio llamado ‘Servicio de Trasnferencia Inteligente en Segundo Plano’ (Background Intelligent Transfer Service (BITS) debe estar presente y funcionando. En términos básicos, este servicio tiene como función  de trasnferir en segundo plano archivos de descarga o carga entre el Cliente y el Servidor, además de proveer información sobre el progreso. En otras palabras, vemos este servicio cuando ponemos a instalar las actualizaciones y nos muestra tanto la información de la descarga que está haciendo, como el progreso general con la barra de color verde.

En este orden de ideas, es necesario tener el servicio corriendo, el problema está, en que con este código de error, lo más probable es que al buscar el Servicio, sea en inglés o en español (De acuerdo al idioma del sistema operativo), no lo encontraremos:

image

En resumen, Windows Update requiere tener el Servicio registrado y corriendo para poder hacer la trasnferencia, pero para este caso, el Servicio ni siquiera se encuentra visible en la Consola, por ende, tampoco está ejecutándose. Ese error suele presentar dos problemas, aunque bajo una misma raíz, es decir, el Servicio de Transferencia Inteligente en Segundo Plano (BITS).

La solución

La Consola de Servicios, presenta un lugar central donde se pueden visualizar todos los Servicios, su estado, sus dependencias, usuarios, y además, se pueden modificar para que inicie, se detenga, o se reinicie, entre otras cosas.

Sin embargo, cada Servicio que se visualiza allí, es porque está funcionando y registrado correctamente en una clave central del Registro para todo el equipo ubicada en:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices

Aquí aparecen con su nombre real, que se puede ver en las Propiedades del Servicio en la Consola; para este caso, el nombre es: BITS.

Los que tengan este error sin embargo, notarán que la clave del Servicio sí aparece en el Registro de Windows:

image

¿Por qué si está la clave, no se registra en la Consola de Servicios? Pues bien, la respuesta es, que el hecho de que la clave y algunos valores existan, no quiere decir que esté bien, es decir, pueden haber valores y claves faltantes, o corruptos que impidan el funcionamiento del servicio, incluso, puede estar tratando de utilizar su DLL correspondiente que esté dañada también.

La forma más eficiente para detectar daños en las claves de Registro, es comparar con un fichero de Registro que se extraiga de un equipo funcional (Que el Serivicio aparezca y esté funcionando). Hasta el SDK para Windows 7, la herramienta por excelencia para hacer esta comparación, se llamaba WinDiff, pero, ya se descontinuó en la última versión del SDK que funciona para Windows 8 y versiones anteriores, por lo tanto, para este problema, recurrí a una herramienta fantástica llamada: KDiff3, disponible gratuitamente aquí: http://sourceforge.net/projects/kdiff3/

En este caso entonces, exporté la clave de BITS tanto del equipo que no funcionaba, como de un equipo que estaba en perfectas condiciones, después, desde KDiff3, se deben abrrir ambos archivos y él hará el trabajo de comparar y mostrar diferencias, esto fue lo que encontré:

WU1

Como lo muestra la captura, comparé el .REG bueno (El de la izquierda), contra el del equipo no funcional (Derecha), y la diferencia con respecto a valores y claves faltantes era inmensa.

Como hay dos claves que no se pueden eliminar en este Servicio (A menos que se cambien los permisos), el primer paso fue simplemente importar el fichero de Registro correcto al equipo no funcional, reiniciar para que Windows registrara nuevamente el servicio, y este fue el resultado:

image

¡Problema solucionado! =)

Si tienen este mismo problema, pueden descargar el fichero de registro BITS desde aquí:

Este es el enlace directo: http://sdrv.ms/TrheG0

Deben descomprimirlo, importarlo, asegurarse que se completó satisfactoriamente, reiniciar el equipo, y poner a descargar e instalar actualizaciones nuevamente.

En caso de que tengan el mismo código de error, y no se les solucione con esto, les agradezco comenten aquí y tratamos de investigar el problema.

Saludos,

Checho

Exportar e Importar asociación de aplicaciones en Windows 8

1537_Win8Logo_01_008485DD

Hola a todos,

Ya hemos tocado aquí varias características notables del nuevo Windows 8, algunas enfocadas más a usuario final, y otras a Profesionales de tecnología. Sin embargo, a partir de ahora, empezaremos a ver algunas cosas interesantes con respecto a la implementación, solución de problemas, y cuando se pueda, un poco de Internals en todas las categorías.
El post de hoy está dedicado a un tema que, si bien no era de notarse mucho en versiones anteriores como Windows 7, estaba causando problemas bastante frecuentes, y se ha mejorado de una manera muy positiva en Windows 8.

Windows internamente, cada que instalamos una nueva aplicación, necesita saber qué tipo de extensiones de los archivos que podemos traer, o crear, se deben asociar con las que la aplicación registró, a esto se le llama: Asociación de aplicaciones.

*Nota: Existen varios tipos de asociaciones en Windows, como las de Los Directorios y Carpetas.

Ya hace un poco más de un año, publiqué aquí uno de los problemas más comunes que tenía Windows 7 con respecto a las asociaciones, y es que fácilmente referenciaba nuestros accesos directos con alguna otra aplicación; Windows 8 tomó nota de esto, y ahora, a pesar de que las instalaciones siguen asociando las diferentes extensiones de las aplicaciones, ya no se abre de forma predeterminada, es decir, sin importar qué software instalemos, siempre seremos nosotros los de la última decisión de cuál debe ser el que se quede con la extensión del archivo o aplicación, de hecho, al finalizar las nuevas instalaciones, Windows 8 nos notificará con un mensaje similar a este:

As1

Esto es sin dunda la solución al problema en Windows 7, pero los usuarios se pueden cansar de estar asociando por cada aplicación, ya que esto era un trabajo que no se debía hacer en versiones anteriores; sin embargo, Windows 8 afortunadamente tiene una serie de asociaciones predeterminadas, por lo que al instalar, ya sabe con qué aplicación debe abrir diferentes tipos de extensiones como el .PDF o el .ZIP. En escenarios de implementación, o como en este caso, para nosotros como usuarios finales, podremos Exportar esta lista predeterminada de una instalación, y después Importarlas en otro equipo, para que cada nuevo usuario, ya sepa cómo debe abrir sus extensiones, incluso antes de que la determinada aplicación se le instale.

*Importante: Lo que haremos, es mucho más eficas cuando se hace Ingeniería de Imagen, es decir, cuando se trabaja sobre una imagen sin conexión (Offline), ya que nos aseguramos que se mantengan estos cambios para todos los usuarios, inclusive desde la instalación de Windows. En este post, trabajaremos sobre una imagen con conexión (Online).

¿Qué necesitamos?

– Un equipo donde instalemos todas las aplicaciones que normalmente asociamos a nuestras extensiones, donde configuraremos y exportaremos el archivo .XML que tendrá todas las asociaciones.

– Un equipo donde podamos Importar el archivo .XML con todas las asociaciones, para luego instalarle las aplicaciones y probar el funcionamiento en los nuevos usuarios.

*Nota: El proceso se puede hacer en un solo equipo, donde desde un usuario se configuran y se exporta el XML, y se importa en otro usuario diferente.

Estableciendo asociación de aplicaciones

Lo primero que debemos hacer, desde uno de los equipos, es instalar todas las aplicaciones que referenciar, y posteriormente asociarlas a las diferentes extensiones; como Windows 8 ya no lo hace de forma predeterminada, es necesario utilizar la ventana de Asociación de archivos o protocolos.

Para este artículo, me enfocaré con una sola extensión que será: .ZIP, y la aplicación que en mi caso quiero remplazar por el Explorador de Windows, será WinRAR.
Abrimos la Pantalla de Inicio y buscamos por Programas predeterminados, lo ejecutamos, y posteriormente hacemos clic en Asociar un tipo de archivo o protocolo con un determinado programa, buscamos la extensión (En este caso .ZIP) y finalmente, clic en el botón Cambiar programa para seleccionar el programa instalado:

Ass

*Nota: Debemos repetir este proceso para cada extensión, y asociar la aplicación que deseamos sea predeterminada en el próximo equipo.

Exportando asociación de archivos y aplicaciones

Una vez hayamos terminado los pasos anteriores para todas las aplicaciones, debemos proceder a exportar las respectivas asociaciones, para esto, utilizaremos la herramienta de DISM (Deployment Image Servicing and Management), que como lo hemos comentado en gran cantidad de artículos, funciona básicamente para hacer mantenimiento a nuestras imágenes offline y online, aunque ahora introdujo para Windows 8 nuevas funcionalidades como esta, y otras más potentes que remplazarán a ImageX.

Desde la Pantalla de Inicio, abrimos un Símbolo del sistema con privilegios elevados (Clic derecho, Ejecutar como administrador), y ejecutamos:

Dism /Online /Export-DefaultAppAssociations:<RutaXML>MiNombre.xml

Donde <RutaXML> es el directorio en el que quiero guardar el archivo XML con toda la configuración respectiva de asociaciones, y “MiNombre.xml” es como deseo llamar al archivo, por su puesto con la extensión requerida por el comando.

Para este artículo, lo guardaré en la unidad “C:”, y lo llamaré: MyApps.xml, por lo que todo el comando sería:

Dism /Online /Export-DefaultAppAssociations:C:MyApps.xml

Apps

Si abrimos el archivo con un editor de texto como el Bloc de Notas, podremos ver que al final aparecerá la asociación referenciando a las aplicaciones que hayamos indicado, por ejemplo, para el .ZIP:

image

Este archivo lo tenemos que pasar ahora al equipo donde predeterminaremos las diferentes extensiones para las mismas aplicaciones.

Importando asociación de archivos y aplicaciones

En el segundo equipo, copiamos el XML que creamos anteriormente en una ubicación sencilla de acceder (Por ejemplo, en una unidad), abrimos nuevamente el Símbolo del sistema con privilegios elevados y ejecutamos:

Dism /Online /Import-DefaultAppAssociations:<RutaXML>:MiNombre.xml

Donde <RutaXML> es el directorio en el que quiero guardar el archivo XML con toda la configuración respectiva de asociaciones, y “MiNombre.xml” es como deseo llamar al archivo, por su puesto con la extensión requerida por el comando

Para este artículo, que ubiqué el archivo en la unidad C: nuevamente, y tiene el nombre de MyApps.xml, el comando sería:

Dism /Online /Import-DefaultAppAssociations:C:MyApps.xml

image

Para verificar que efectivamente la asociación se cambió, podemos utilizar el comando:

Dism /Online /Get-DefaultAppAssociations

image

Todo está listo, bastará con instalar la aplicación (Como en este caso WinRAR) si es que no se ha hecho, crear el o los nuevos usuarios y veremos que Windows reconocerá inmediatamente que debe abrir los archivos especificados con las aplicaciones que se hayan establecido de forma predeterminada.

Opcional: ¿Por qué el usuario en el que se importan no reconoce las asocicaciones?

Si esto lo hicimos como en este post desde unas imágenes Online, es decir, desde un sistema operativo ya andando, nuestro primer usuario sólo servirá para predeterminar, pero no reconocerá necesariamente esta configuración a menos que la hagamos manualmente, y la razón, es que este archivo importado lo único que le dice a Windows es que cada que se inicie un nuevo usuario, se le asocie las extensiones con las aplicaciones, y aunque aplica para todos los usuarios, la configuración se hace en HKEY_CURRENT_USER, lo que indica que la configuración se va aplicando usuario por usuario.

Si utilizamos Process Monitor de Sysinternals por ejemplo, podremos ver este comportamiento claramente con la opción de Enable Boot Logging, bastará con reiniciar desde el usuario que se importó después de habilitar la característica de Process Monitor, y seguir a la extensión para saber qué claves crea, si fuéramos a enfocarnos en la de este post, es decir, .ZIP, veríamos entre otras cosas, esto:

image

La clave que está seleccionada, junto con la operación de RegSetValue que normalmente está más abajo, son las dos más importantes, la primera crea el valor de UserChoice en la clave: HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.zip

La segunda operación, que en realidad se repetirá dos veces (NO se ve en la captura), es establecer dos valores, Hash y Progid, que se verán reflejados en el Registro de Windows, por supuesto:

D4

Ambos cumplen la función de identificar las aplicaciones con las que nosotros decidimos que se iban a abrir las distintas extensiones, esta clave se crea también cuando establecemos la asociación en el primer paso de este artículo, y mientras UserChoice esté con vida, no se cambiará la asociación, a menos que cada uno lo haga manualmente.

Si UserChoice no existiera, como predeterminadamente sucede, Windows leería los valores que identifiquen a la, o a las aplicaciones con las que se puede abrir la extensión dentro de la clave de OpenWithProgid. Para el caso de las que ya Windows reconoce predeterminadamente, como .ZIP o .PDF, suele haber recién instalado un solo valor, específicamente: CompressedFolder, así que Windows busca dentro de HKEY_CLASSES_ROOT la clave que corresponda a ese valor y utiliza la aplicación.

image

Cuando se instala otra aplicación como WinRAR sin embargo, pasan a ser dos valores que trabajan como Variables de entorno, la primera para el Explorador, y la segunda para WinRAR:

image

*Nota: Internamente, la variable de WinRAR es: WinRAR.ZIP.

Como hay dos, ya Windows dejará que el usuario sea el que elija, una vez lo haga, es donde se crea la carpeta UserChoice y sus respectivos valores.

*Nota: Windows es supremamente inteligente con respecto a sus asociaciones, si los valores no se encuentran en su clave de HKCU, los buscará en HKEY_CLASSES_ROOT.zip por ejemplo y los copiará nuevamente a HKCU; si no está en HKCR, utilizará los que encuentre dentro de HKCU, hasta que se quede sin los dos, y no pueda referenciar ninguna aplicación (Esto pasaría si eliminamos ambas claves):

2

Hay muchísimo más que contar, tanto en el escenario de implementación offline, como de su espléndido comportamiento a nivel del Registro de Windows, cosas que trataremos de ir viendo conforme vaya incrementando mis conocimientos, y escriba artículos específicos de implementación o de Internals.

Saludos,

Checho