Problema

En entornos de producción con Windows Server 2019 (Standard o Datacenter, Desktop Experience) es frecuente que la instalación de un Cumulative Update falle con el código 0x800F0988 – PSFX_E_INVALID_DELTA_COMBINATION. El error aparece tanto mediante Windows Update como al ejecutar el paquete MSU de forma manual. En los logs de CBS (Component Based Servicing) se muestra un fallo al “pre‑stage” un archivo específico del componente Microsoft.IdentityServer.Service.Resources.dll (u otros DLLs de AD FS) y la instalación se aborta antes de iniciar la fase de aplicación.

Este patrón se repite cuando:

  • El servidor ya está en una versión de build reciente (por ejemplo 17763.xxx) y el paquete que se intenta aplicar incluye un “delta” que no encaja con el estado actual del component store.
  • No hay un rol de AD FS instalado, pero el paquete delta todavía hace referencia a archivos de ese componente.
  • El Servicing Stack está actualizado, pero la base de datos de componentes (WinSxS) está desincronizada o contiene paquetes intermedios que impiden la generación del delta correcto.

El síntoma principal es el mensaje de error 0x800F0988 y la ausencia de código de error adicional en el visor de eventos, lo que dificulta la identificación rápida del origen.

Causa

1. Delta incompatibles con el estado del component store

Los Cumulative Updates se componen de full y delta paquetes. Cuando el componente objetivo ya está en una versión que no coincide con la esperada por el delta, el motor de CBS no puede combinar los archivos y devuelve PSFX_E_INVALID_DELTA_COMBINATION.

2. Paquetes “huérfanos” o parcialmente instalados

En servidores que han recibido actualizaciones intermedias fallidas, pueden quedar entradas en la base de datos de paquetes (CBS) que marcan un componente como installed aunque el archivo real no exista en WinSxS. El intento posterior de aplicar un delta que asume la presencia de ese archivo falla.

3. Componentes opcionales sin rol asociado

Algunos paquetes de actualización incluyen archivos de AD FS, Windows Identity Foundation o similares aunque el rol no esté habilitado. Si el componente está presente en el component store pero no registrado, el delta puede quedar desalineado.

4. Servicing Stack desactualizado o corrupto

Aunque el Servicing Stack parezca actualizado, una corrupción parcial (por ejemplo, archivos de catroot2 dañados) impide que la herramienta de staging genere los paquetes temporales necesarios.

Solución

La estrategia consiste en forzar la reinstalación del componente problemático, eliminar paquetes huérfanos y, si es necesario, aplicar la actualización como paquete completo. Los pasos siguientes funcionan tanto en Windows Server 2019 como en versiones posteriores que comparten el mismo modelo de CBS.

Paso 1 – Identificar el paquete problemático

Ejecuta el siguiente comando para obtener la lista de paquetes que fallan al pre‑stage:

dism /online /get-packages /format:table | findstr /i "Microsoft.IdentityServer"

Si el nombre del paquete incluye Package_for_RollupFix y la versión del archivo que falla, anótalo.

Paso 2 – Desinstalar el paquete huérfano (si existe)

Utiliza DISM para eliminar la entrada del paquete sin tocar los archivos reales:

dism /online /remove-package /packagename:Package_for_RollupFix~31bf3856ad364e35~amd64~~17763.9020.1.30 /quiet

En caso de que el paquete no esté presente, el comando mostrará un mensaje de “Package not found”, lo cual es aceptable.

Paso 3 – Restaurar el componente desde el almacén de componentes

Reinstala el DLL o el paquete completo usando la imagen de instalación (ISO, DVD o archivo install.wim). Si no dispones de una ISO, puedes montar la versión de evaluación de Windows Server 2019 (el mismo build) y usarla como fuente.

dism /online /add-package /packagepath:F:\sources\install.wim /limitaccess /quiet

Reemplaza F: por la letra de la unidad donde está montada la imagen. El parámetro /limitaccess evita que DISM contacte a Windows Update.

Paso 4 – Limpiar la caché de Windows Update

Detén los servicios, elimina las carpetas temporales y reinicia:

net stop wuauserv
net stop bits
net stop cryptsvc
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv
net start bits
net start cryptsvc

Paso 5 – Ejecutar una reparación completa del component store

Ejecuta DISM con la opción de RestoreHealth apuntando a la imagen de instalación para asegurarse de que todos los paquetes faltantes se reparen:

dism /online /cleanup-image /restorehealth /source:wim:F:\sources\install.wim:2 /limitaccess

Paso 6 – Instalar la actualización como paquete completo

En lugar de confiar en el delta, descarga el cumulative update completo (no el delta) desde Microsoft Update Catalog y ejecútalo con wusa en modo silencioso:

wusa.exe KB5099538.msu /quiet /norestart

Si el paquete completo se instala sin errores, el problema estaba limitado al delta.

Paso 7 – Verificar el Servicing Stack

Confirma que la versión del Servicing Stack es la más reciente para el build en cuestión:

dism /online /get-packages | findstr /i "ServicingStack"

Si la versión es anterior a la recomendada, instala el paquete de Servicing Stack correspondiente antes de volver a intentar la actualización.

Cuándo aplicar esta solución

Aplicable cuando:

  • El error reportado es 0x800F0988 (PSFX_E_INVALID_DELTA_COMBINATION) durante la instalación de cualquier Cumulative Update en Windows Server 2019/2022.
  • Los logs de CBS indican un fallo en el pre‑stage de un archivo específico (por ejemplo, Microsoft.IdentityServer.Service.Resources.dll).
  • No hay roles de AD FS instalados, pero el paquete menciona componentes de identidad.
  • La reinstalación del Servicing Stack o la simple ejecución de sfc /scannow no resuelve el problema.

No aplicable cuando:

  • El error es 0x800F0906 (download failure) o 0x800F081F (missing prerequisite), que requieren otras rutas.
  • El servidor está en una versión de build anterior a 17763 y el paquete que se intenta instalar no es compatible.
  • La infraestructura usa WSUS con políticas de aprobación que bloquean paquetes completos; en ese caso se debe ajustar la política antes de aplicar el paquete completo.

Código

# Paso 1: listar paquetes problemáticos
dism /online /get-packages /format:table | findstr /i "Microsoft.IdentityServer"

# Paso 2: eliminar paquete huérfano (ajustar nombre)
dism /online /remove-package /packagename:Package_for_RollupFix~31bf3856ad364e35~amd64~~17763.9020.1.30 /quiet

# Paso 3: reinstalar componente desde ISO montada en F:
dism /online /add-package /packagepath:F:\sources\install.wim /limitaccess /quiet

# Paso 4: limpiar caché de Windows Update
net stop wuauserv
net stop bits
net stop cryptsvc
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv
net start bits
net start cryptsvc

# Paso 5: reparación completa del component store
dism /online /cleanup-image /restorehealth /source:wim:F:\sources\install.wim:2 /limitaccess

# Paso 6: instalar actualización completa
wusa.exe KB5099538.msu /quiet /norestart

Verificación

  1. Revisar el log de CBS (C:\Windows\Logs\CBS\CBS.log). La última entrada debe indicar “CBS succeeded” y no aparecer 0x800F0988.
  2. Comprobar la versión del build con systeminfo o winver. El número de build debe haber aumentado al número objetivo del cumulative update.
  3. Ejecutar dism /online /get-packages y buscar el paquete recién instalado; debe aparecer con estado Installed.
  4. Validar que Windows Update ya no muestra la actualización como pendiente.

Notas adicionales

  • Si no dispones de una ISO oficial, puedes crear una copia de install.wim usando la herramienta Media Creation Tool en otro equipo y copiarla al servidor mediante SMB.
  • En entornos con WSUS, habilita la opción “Allow signed updates from Microsoft Update” para que el servidor pueda descargar paquetes completos cuando los delta fallen.
  • Mantener un snapshot o backup del WinSxS antes de manipular paquetes es buena práctica; permite revertir rápidamente si la eliminación del paquete huérfano genera dependencias rotas.
  • Algunos clientes reportan que reiniciar el servidor después del paso 4 (limpieza de caché) reduce la probabilidad de que el mismo delta vuelva a intentar pre‑stage antes de que los cambios de DISM se apliquen completamente.

Con estos pasos, la mayoría de los fallos 0x800F0988 pueden resolverse sin necesidad de reinstalar el sistema operativo completo, manteniendo la disponibilidad del servicio en producción.