La actualización acumulativa KB5034765 para Windows 11 23H2 ya está instalada, pero Windows Update insiste en ofrecerla y termina con el error 0x80070002. En esta guía verás por qué ocurre y cómo resolverlo: comprobar el estado real, limpiar la caché, ocultar el paquete y reparar el sistema.
Resumen del caso
El equipo indica que la actualización de seguridad y calidad KB5034765 (liberada alrededor de mediados de febrero de dos mil veinticuatro) ya se encuentra instalada. Sin embargo, el módulo de Windows Update vuelve a detectarla como pendiente y, al intentar aplicarla de nuevo, el proceso finaliza con el código de error 0x80070002. Cuando se ejecuta el instalador independiente (.msu
), el mensaje es “ya está instalada”.
Este comportamiento es típico de una detección inconsistente provocada por entradas corruptas o incompletas en la caché de actualización o en el Component Store (almacén de componentes de Windows, también conocido como WinSxS). La solución pasa por verificar el estado real del paquete, restablecer los componentes de Windows Update, y—si procede—ocultar el paquete para evitar su reoferta, además de reparar integridad del sistema.
Causa y alcance
El código 0x80070002 se interpreta comúnmente como “archivo no encontrado” y se relaciona con archivos faltantes o rutas incorrectas durante el proceso de actualización. En el contexto de un acumulativo que ya figura como instalado, el fallo suele ser cosmético: la actualización se reofrece por un problema de caché o de metadatos, no porque falten realmente los binarios del paquete.
- Si el paquete figura como instalado o reemplazado (estado Installed o Superseded), la reoferta es fruto de detección errónea.
- Si no figura, puede existir un problema genuino en el almacén de componentes u otros prerequisitos que impiden el registro del paquete.
Comprobación del estado del paquete
Antes de cambiar nada, valida que KB5034765 esté presente. Abre PowerShell como Administrador y ejecuta:
dism /online /get-packages | findstr 5034765
Opcional: comprobación adicional
Get-HotFix | Where-Object { $_.HotFixID -eq "KB5034765" }
Interpretación:
- Si aparece en la salida de
dism
con estado Install Pending, Installed o Superseded, el sistema ya tiene el paquete o uno que lo remplaza. - Si
Get-HotFix
lo muestra, es una confirmación adicional; no todos los acumulativos figuran en este listado, por lo que su ausencia aquí no implica que no esté instalado.
Consejo: en ocasiones, el paquete acumulativo más reciente sustituye al anterior. Por eso puedes ver estados como Superseded, lo que refuerza la hipótesis de detección errónea si Windows Update insiste en ofrecer el anterior.
Restablecer componentes de actualización
Este procedimiento borra y regenera la caché local utilizada por Windows Update, así como el catálogo criptográfico temporal asociado. Ejecuta CMD como Administrador y lanza, en este orden:
net stop bits
net stop wuauserv
net stop cryptsvc
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
ren %systemroot%\System32\catroot2 catroot2.old
\:: Opcional; puede no existir y es normal que no lo encuentre
del /q /f "%ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr\*.dat"
net start bits
net start wuauserv
net start cryptsvc
Qué hace cada paso:
Servicio o carpeta | Función | Efecto del restablecimiento |
---|---|---|
BITS | Transferencia en segundo plano | Detiene descargas en curso para liberar archivos bloqueados |
WUAUSERV | Motor de Windows Update | Permite renombrar la caché SoftwareDistribution |
CRYPTSVC | Servicios criptográficos | Libera catroot2 para regenerar catálogos |
SoftwareDistribution | Caché de metadatos y descargas | Se crea una nueva estructura limpia al reiniciar el servicio |
catroot2 | Almacén temporal de catálogos | Se regenera con firmas y catálogos frescos |
Tras ejecutar los comandos, reinicia el equipo. Si el error era de caché, el sistema dejará de reofrecer el paquete o la detección se corregirá.
Ocultar la actualización
Si el paquete KB5034765 figura como instalado y aun así se reofrece, ocúltalo hasta que llegue un acumulativo posterior que lo reemplace completamente.
Opción con herramienta de ocultación
La utilidad de diagnóstico Mostrar u ocultar actualizaciones permite marcar manualmente el paquete problemático para que no aparezca. Si no puedes usarla en tu entorno, pasa a las alternativas de más abajo.
Alternativa con PowerShell
Usa el módulo PSWindowsUpdate en una consola de PowerShell con privilegios elevados:
Set-ExecutionPolicy RemoteSigned -Scope Process -Force
Install-Module -Name PSWindowsUpdate -Force
Ocultar específicamente el paquete
Hide-WindowsUpdate -KBArticleID KB5034765 -Hide -Verbose
Esto marcará el paquete para que no se presente de nuevo en el escaneo. Más adelante podrás revertirlo con -Hide:$false
.
Mitigación con pausa
Como medida rápida, activa la pausa temporal en Configuración → Windows Update → Pausar por una o varias semanas. Esta pausa evita reintentos mientras limpias la caché o esperas el acumulativo siguiente que sustituya al paquete conflictivo.
Reparación del almacén y de archivos del sistema
Si tras limpiar la caché persiste el comportamiento, repara la integridad del Component Store y del sistema de archivos:
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
- DISM analiza y repara la imagen de Windows, corrigiendo manifest y metadatos en WinSxS.
- SFC restaura archivos del sistema dañados desde el almacén de componentes.
Al finalizar, reinicia y verifica de nuevo el comportamiento de Windows Update. Si había corrupción en el almacén, la detección de paquetes volverá a ser coherente.
Verificaciones posteriores
- Abre Configuración → Windows Update y pulsa Buscar actualizaciones. Comprueba si el paquete deja de aparecer o si aparece un acumulativo más reciente.
- En Historial de actualizaciones, confirma que el paquete está marcado como instalado o que figura un reemplazo posterior.
- Si ocultaste el paquete, verifica desde PSWindowsUpdate que su estado sea Hidden.
Explicación técnica
Los acumulativos mensuales engloban cientos de archivos, manifiestos y catálogos. Una entrada parcial en SoftwareDistribution
o en los catálogos temporales de catroot2
puede provocar que la fase de detección (Scan) piense que el paquete falta, aunque la fase de instalación (Install) reconozca que ya se encuentra. Por eso, al ejecutar el instalador independiente, se muestra “ya instalado”, mientras que el agente de actualización insiste en ofrecerlo. Restablecer la caché y regenerar catálogos resuelve esta divergence.
Casos especiales
- Instalador independiente muestra “ya instalado”: indica fenómeno cosmético. Ocultar el paquete y limpiar la caché suelen bastar.
- Otros acumulativos fallan: repara el almacén con
DISM
ySFC
. Considera ademásDISM /Online /Cleanup-Image /StartComponentCleanup
para optimizar componentes obsoletos. - Reintentos tras hibernación o suspensión: programa un reinicio tras el restablecimiento de servicios para garantizar la regeneración completa de la caché.
Solucionador integrado
En algunos entornos, correr el solucionador de problemas de Windows Update ayuda a limpiar reglas de detección y reindexar componentes:
Configuración → Sistema → Solucionar problemas → Otros solucionadores de problemas → Windows Update → Ejecutar
Al terminar, vuelve a comprobar si la actualización deja de presentarse.
Diagnóstico con registros
- Visor de eventos: Registros de Windows → Configuración, origen WindowsUpdateClient. Revisa entradas recientes alrededor del momento del error.
- Registro CBS:
C:\Windows\Logs\CBS\CBS.log
. Busca menciones a la cadena del paquete o a errores de hash. - Registro DISM:
C:\Windows\Logs\DISM\dism.log
. Útil siDISM
reporta correcciones o problemas de manifiestos.
Lista de comprobación
- Confirmar estado real del paquete con
dism
y, opcionalmente,Get-HotFix
. - Detener servicios y renombrar
SoftwareDistribution
ycatroot2
. - Reiniciar y forzar un escaneo de actualizaciones desde Configuración.
- Ocultar el paquete si ya figura instalado y se reofrece.
- Ejecutar
DISM
ySFC
si persisten fallos en otros paquetes.
Guía paso a paso ampliada
Verificación con línea de comandos
# Buscar el paquete por su identificador
dism /online /get-packages | findstr 5034765
Listar hotfix y filtros de seguridad (puede no incluir todos los acumulativos)
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 20
Resultado esperado: la cadena del paquete debería aparecer como instalada o reemplazada. Si no aparece, ejecuta la reparación de almacén y reintenta el escaneo.
Reinicio limpio de caché
net stop bits & net stop wuauserv & net stop cryptsvc
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
ren %systemroot%\System32\catroot2 catroot2.old
net start bits & net start wuauserv & net start cryptsvc
Si los comandos de ren
devuelven “acceso denegado”, asegúrate de que los servicios estén detenidos y que la consola se haya abierto como Administrador.
Ocultación con módulo de PowerShell
# Instala y usa PSWindowsUpdate
Set-ExecutionPolicy RemoteSigned -Scope Process -Force
Install-Module -Name PSWindowsUpdate -Force
Oculta el acumulativo específico
Hide-WindowsUpdate -KBArticleID KB5034765 -Hide -Verbose
Más adelante, para desocultar:
Hide-WindowsUpdate -KBArticleID KB5034765 -Hide:\$false -Verbose
Verificación de hora del sistema
Una hora incorrecta puede romper validaciones de certificados y firmas. Comprueba y corrige la sincronización:
w32tm /query /status
w32tm /resync
Confirma que la zona horaria coincida con tu ubicación desde Configuración → Hora e idioma.
Script de automatización
Si atiendes varios equipos, este script de PowerShell automatiza la verificación, el restablecimiento y la ocultación del paquete problemático. Ejecuta como Administrador:
$ErrorActionPreference = 'Stop'
Comprobar si el paquete aparece instalado o reemplazado
\$kb = 'KB5034765'
Write-Host "Comprobando estado de \$kb..."
\$dismOut = (dism /online /get-packages) 2>&1
\$present = \$dismOut -match '5034765'
if (\$present) {
Write-Host "\$kb aparece en la imagen. Procediendo a restablecer componentes y ocultar el paquete..." -ForegroundColor Green
} else {
Write-Host "\$kb no se encontró en la salida de DISM. Se intentará limpieza y reparación." -ForegroundColor Yellow
}
Detener servicios
'bits','wuauserv','cryptsvc' | ForEach-Object {
Write-Host "Deteniendo servicio \$*..."
sc.exe stop \$* | Out-Null
}
Renombrar cachés
\$sd = Join-Path \$env\:SystemRoot 'SoftwareDistribution'
\$cr = Join-Path \$env\:SystemRoot 'System32\catroot2'
if (Test-Path \$sd) { Rename-Item \$sd (\$sd + '.old') -ErrorAction SilentlyContinue }
if (Test-Path \$cr) { Rename-Item \$cr (\$cr + '.old') -ErrorAction SilentlyContinue }
Iniciar servicios
'bits','wuauserv','cryptsvc' | ForEach-Object {
Write-Host "Iniciando servicio \$*..."
sc.exe start \$* | Out-Null
}
Reparación de imagen y archivos
Write-Host "Ejecutando DISM y SFC..."
Start-Process -FilePath 'cmd.exe' -ArgumentList '/c','DISM /Online /Cleanup-Image /RestoreHealth' -Wait -Verb RunAs
Start-Process -FilePath 'cmd.exe' -ArgumentList '/c','sfc /scannow' -Wait -Verb RunAs
Instalar PSWindowsUpdate y ocultar el paquete si se detecta reoferta
try {
if (-not (Get-Module PSWindowsUpdate -ListAvailable)) {
Install-Module -Name PSWindowsUpdate -Force -Scope AllUsers
}
Import-Module PSWindowsUpdate -Force
Write-Host "Ocultando \$kb..."
Hide-WindowsUpdate -KBArticleID \$kb -Hide -Verbose
} catch {
Write-Warning "No fue posible ocultar el paquete con PSWindowsUpdate: \$($\_.Exception.Message)"
}
Write-Host "Completado. Reinicia el equipo y ejecuta un nuevo escaneo desde Configuración → Windows Update."
Resumen de acciones y resultados
Acción | Comando | Resultado esperado |
---|---|---|
Comprobar estado del paquete | dism /online /get-packages | findstr 5034765 | El paquete aparece como instalado o reemplazado |
Restablecer caché | net stop/start y ren de carpetas | Regeneración limpia de catálogos y metadatos |
Ocultar reoferta | Hide-WindowsUpdate -KBArticleID KB5034765 -Hide | El paquete deja de presentarse en el escaneo |
Reparar almacén | DISM /RestoreHealth y sfc /scannow | Corrección de manifiestos y archivos dañados |
Validar | Escaneo desde Configuración | Historial coherente y sin reoferta del paquete |
Errores relacionados
Si además de 0x80070002 ves otros códigos, esta guía puede acompañarse con las siguientes pistas:
Código | Indicio | Acción recomendada |
---|---|---|
0x800f081f | Orígenes de reparación ausentes | Repetir DISM con orígenes válidos o ISO montado |
0x800f0988 | Componentes en estado inconsistente | StartComponentCleanup y luego RestoreHealth |
0x8024200d | Descarga incompleta o dañada | Restablecer SoftwareDistribution y repetir descarga |
Buenas prácticas
- Mantén la fecha y hora correctas; utiliza sincronización de hora.
- Evita borrar manualmente archivos del sistema fuera de los procedimientos documentados.
- Reinicia después de limpiar caché o de ejecutar
DISM
/SFC
. - Cuando aparezca un acumulativo más reciente, desoculta el anterior y reanuda el ciclo normal de parches.
Conclusión
Cuando Windows Update reofrece KB5034765 y falla con 0x80070002 pese a que el instalador independiente afirma que ya está instalada, la causa más probable es una inconsistencia de caché o de catálogos. La secuencia verificar → restablecer → ocultar → reparar corrige la detección y evita reintentos inútiles. Tras el siguiente acumulativo mensual, podrás desocultar el paquete y continuar con el mantenimiento habitual del sistema sin ruidos en el historial de actualizaciones.
Apéndice práctico
Comandos clave reunidos
# Verificar presencia del paquete
dism /online /get-packages | findstr 5034765
Get-HotFix | Where-Object { $_.HotFixID -eq "KB5034765" }
Restablecer caché de actualización (CMD)
net stop bits
net stop wuauserv
net stop cryptsvc
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old
ren %systemroot%\System32\catroot2 catroot2.old
del /q /f "%ALLUSERSPROFILE%\Microsoft\Network\Downloader\qmgr\*.dat"
net start bits
net start wuauserv
net start cryptsvc
Ocultar el paquete específico
Set-ExecutionPolicy RemoteSigned -Scope Process -Force
Install-Module -Name PSWindowsUpdate -Force
Hide-WindowsUpdate -KBArticleID KB5034765 -Hide -Verbose
Reparar almacén y archivos
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
Con estas acciones, el problema de reoferta y el error de detección quedan saneados. Si además necesitas instalar otros parches que no sean el acumulativo mencionado, puedes hacerlo manualmente desde el catálogo oficial cuando corresponda. Para el acumulativo citado, no es necesario repetir una instalación que ya consta en el sistema.