miércoles, 10 de agosto de 2022

Error 0x800700c1 al instalar actualizaciones en Windows 10


Cuando intentamos actualizar, aparece el error "0x800700c1". Para saber mas detalles nos remitimos al log del CBS que nos indica cada paso que realiza el sistema de actualizaciones de Windows.

Cuando hay problema con las actualizaciones el log CBS (Component-Based Servicing) es muy importante. Se ubica en "C:\Windows\Logs\CBS" y nos da información esencial para lidiar con estos problemas que el "Solucionador de Problemas" de Windows no puede resolver. ¿A caso alguna vez resolvió alguno?

Extracto del log CBS.LOG:

Failed to load Core DLL from path: C:\WINDOWS\winsxs\amd64_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.18362.590_none_5efc551459114cb9\\cbscore.dll [HRESULT = 0x800700c1 - ERROR_BAD_EXE_FORMAT]

2021-12-03 21:54:31, Info                  CBS    Failed to initialize CBS class factory. [HRESULT = 0x800700c1 - ERROR_BAD_EXE_FORMAT]

El resultado "0x800700c1" se produce porque el sistema no puede leer el archivo, en este caso el "cbscore.dll" podría ser cualquier otro archivo ligado al sistema de actualización (Windows Modules Installer Worker) conocido como "TiWorker.exe".

El archivo estaba dañado, se había perdido la firma digital y no podía ser reconocido como un archivo valido, por lo tanto todo el motor de actualización fallaba.

No se podía siquiera utilizar la herramienta SFC ni la DISM, porque también pasa por el mismo "TiWorker.exe". La solución fue reparar manualmente el archivo.

Para tal fin, tuve que bajar el paquete de actualización correspondiente a la versión del archivo, (en mi caso Actualización kb4528759 x64 paquete "windows10.0-kb4528759-x64_c2d6639977986b927d0b9f1acf0fb203c38fc8c8.msu", y extraer los archivos manualmente. Esta parte puede ser realmente complicada. Porque Microsoft quita del catalogo paquetes que son viejos. A veces hay que terminar en lugares oscuros de la internet. También se podría buscar el archivo o los archivos en otras PC con Windows 10, pero tienen que coincidir en versión, o haber tenido la versión alguna vez instalada.

¿Cómo saber que paquete de actualización bajar? Pues, hay que buscar en la base de datos de Microsoft a que paquete corresponde la actualización. En mi caso, busque el archivo "cbscore.dll" con la fecha de lanzamiento del archivo. También se podría copiar de otro Windows 10 que este funcionando, buscando el nombre de la carpeta, en WINSXS, por ejemplo, en mi caso el nombre de la carpeta era "amd64_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.18362.590_none_5efc551459114cb9"

Si conseguimos el archivo de otro Windows 10, lo copiamos y lo pegamos en la carpeta, PERO para eso hay que tomar posesión de la misma y del archivo, sino no se puede sobreescribir, mas abajo dejo un link de como se hace, pero si llegaste hasta acá, seguro ya sabes como hacerlo.

Si tenes que conseguir el archivo "original" del paquete de actualización, estos son los pasos pasos de como se extrae el contenido del paquete MSU:

1.- Abrir una consola nivel administrador

2.- Crear un directorio donde vamos a guardar la extracción

    mkdir directorio_de_extraccion

3.- Extraemos el archivo con la linea de comandos

    X:\Carpeta> expand -F:* nombre_del_paquete.msu  "directorio_de_extraccion"

Una vez realizada la extracción hay que extraer el CAB que se creo en ese mismo directorio.

4.- cd directorio_de_extraccion

5.- mkdir directorio_cab (creamos un directorio destino para extraer el archivo CAB)

6.- expand -F:* Windows10.0-KBXXXXXX-x64.cab directorio_cab

Ahora solo queda buscar el archivo y reemplazar en WINSXS. Que posiblemente sea la parte mas complicada, por el tema de los permisos del directorio. Hay que tomar posesión de la carpeta donde esta alojado el archivo y del archivo corrupto también, sino no se va a poder modificar. Dejo aca un link donde lo explican al detalle: https://www.tecnicomo.com/windows/como-tomar-posesion-de-una-carpeta-o-archivo-en-windows-10/


Espero le haya servido a alguien. Saludos!