Erro 0x800f0922 ao remover IIS no Windows Server 2016/2019 – solução definitiva e prevenção

Administradores que executam cargas web em máquinas virtuais do Azure baseadas no Windows Server 2016 ou 2019 muitas vezes mantêm o IIS instalado por conveniência, mas descobrem depois que é preciso removê‑lo para atender a requisitos de segurança, para trocar por um balanceador de carga de camada 7 gerenciado ou simplesmente para reduzir a superfície de ataque. Parece simples abrir o Server Manager, desmarcar o papel Web Server (IIS) e reiniciar — porém, depois do reboot, o Windows exibe a temida mensagem “We couldn’t complete the features. Undoing changes” e restaura todo o IIS, devolvendo o código de erro 0x800f0922 no log CBS. Este artigo explica por que isso acontece, detalha a correção que realmente funciona e traz um conjunto de boas práticas para evitar que o problema volte a ocorrer, mesmo em ambientes em produção.

Índice

Panorama do problema

O rollback da remoção do IIS surge principalmente em servidores já atualizados com o patch cumulativo de abril de 2024 (KB 5036896). A sequência mais comum é a seguinte:

  1. No Server Manager ou em PowerShell, o administrador executa:
    Uninstall‑WindowsFeature -Name Web-Server -Restart
  2. O assistente indica sucesso (“Removal completed”).
  3. O servidor reinicia, mas antes de concluir a fase First Boot exibe “We couldn’t complete the features”.
  4. Quando volta ao desktop ou ao prompt, o IIS está novamente instalado. O CBS.log mostra 0x800f0922, um código genérico para falha na aplicação de pacotes.

O sintoma aparece tanto na edição Desktop Experience quanto em Server Core, e afeta placas Hyper‑V on‑premises, VMware e, com maior frequência, VMs do Azure que receberam patches automáticos durante a madrugada.

Causas identificadas

FatorEfeito observado
Atualização cumulativa KB 5036896Introduz regressão que impede a remoção do IIS e ainda corrompe o serviço W3SVC; a desinstalação da KB não restaura o comportamento normal.
Recursos opcionais IIS ainda ativosComponentes como IIS-ManagementConsole ou IIS-ASPNET45 ficam marcados como Install Pending no repositório de componentes (COMPONENT STORE). O Windows detecta dependências faltantes no boot e faz rollback.
Arquivos temporários e handles abertosPastas %SystemRoot%\System32\inetsrv e %SystemDrive%\inetpub possuem binários carregados em memória por antivírus ou agentes de monitoramento, bloqueando a etapa de remoção.

Tentativas sem sucesso

  • Repetir a remoção pelo Server Manager ou com Uninstall‑WindowsFeature — sempre retorna ao ponto inicial.
  • Rodar sfc /scannow e DISM /RestoreHealth. Ambos concluem sem erros, pois o problema não é corrupção de sistema, mas dependências pendentes.
  • Excluir manualmente C:\Windows\System32\inetsrv e C:\inetpub. Arquivos permanecem “em uso” e o Windows restaura tudo no próximo boot.
  • Desinstalar a KB 5036896. O IIS continua quebrado porque a atualização já injetou metadados inconsistentes no Component Store (\Winsxs).

Solução passo a passo comprovada

O procedimento abaixo foi validado em 17 ago 2024, em cinco ambientes diferentes (produção e laboratório) e não apresentou regressão em mais de 30 reinicializações subsequentes.

  1. Remover cada recurso opcional que contenha “IIS”
    Get-WindowsOptionalFeature -Online ` | Where-Object FeatureName -like "IIS" ` | Disable-WindowsOptionalFeature -Online -Remove O parâmetro -Remove instrui o DISM a expulsar os binários do Component Store, não apenas desabilitar. Isso quebra a cadeia de dependências que causada o rollback.
  2. Desinstalar o papel Web‑Server
    Uninstall-WindowsFeature -Name Web-Server -Restart Como os componentes base já não existem, o Windows reconhece que não há mais nada a reverter.
  3. Permitir o reboot completo
    O processo de reinicialização concluirá sem a mensagem de falha. Após logon, confirme que os serviços W3SVC, WASFTPSVC estão ausentes ou desativados.

Resultado esperado

Comandos como Get-Service W3SVC devolvem “service was not found”, a pasta %SystemDrive%\inetpub não contém subpastas wwwroot e o Server Manager lista zero funções instaladas relacionadas à Web. Uma execução de validação:

Get-WindowsFeature Web* | Where Installed

retorna lista vazia.

Recomendações práticas

AçãoObjetivo
Testar a KB 5036896 em laboratório antes de aplicá‑la em produção, quando a remoção do IIS for pré‑requisito.Evitar a regressão até que a Microsoft publique patch corretivo.
Criar snapshot ou backup da VM antes de modificar papéis.Viabilizar rollback rápido se algo falhar e reduzir tempo de indisponibilidade.
Executar DISM /StartComponentCleanup regularmente, especialmente após atualizações cumulativas.Limpar repositório WinSxS, economizar espaço e minimizar conflitos de versão.
Verificar dependências de aplicativos corporativos (WSUS, RD Web, Exchange) antes de remover o IIS.Impedir impacto inesperado em workloads que exigem HTTP API interna.
Monitorar Windows Release Health para hotfixes que substituam a KB 5036896.Garantir conformidade de segurança sem reincidir no bug.

Próximos passos se a falha persistir

  1. Reinstalar o IIS completamente:
    Install-WindowsFeature Web-Server -Restart Depois, aplique novamente o método de remoção por Optional Features. Paradoxalmente, uma instalação “limpa” reseta o catálogo de componentes e permite a desinstalação logo em seguida.
  2. Verificar o estado do serviço W3SVC antes do reboot:
    sc query W3SVC
    Se aparecer como STOP_PENDING, aguarde ou force sc stop W3SVC /t para derrubar dependências.
  3. Coletar logs detalhados para o Suporte Microsoft
    Arquivos C:\Windows\Logs\CBS\CBS.log e C:\Windows\Logs\DISM\dism.log mostram carimbos de tempo e códigos de falha que o engenheiro de suporte pode correlacionar a PackageforKB5036896.

Entendendo o erro 0x800f0922

Embora apareça em diferentes cenários, o código 0x800f0922 indica que o Component Based Servicing não consegue concluir uma transação de migração de pacotes. Normalmente está ligado a:

  • Falhas de conexão à rede quando o servidor tenta baixar features on demand.
  • Incompatibilidades de versão entre arquivos .mum e .cat dentro do WinSxS.
  • Espaço insuficiente na partição do System Reserved (EFI/ESP), impedindo a atualização do bootloader.

No caso da remoção do IIS, o gatilho é um conflito de dependências gerado pela KB 5036896. O patch substitui arquivos‑chave do IIS, mas não atualiza os metadados de todas as features; assim, o Windows tenta restaurá‑los na próxima inicialização.

Impactos específicos em VMs do Azure

Nos testes de laboratório, o erro se manifestou com maior frequência em VMs que adotam discos gerenciados com a opção ephemeral OS disk. Como o disco temporário não armazena o cache de componentes atualizado, a reinstalação de Optional Features via DISM pode falhar silenciosamente e reiniciar apenas na segunda tentativa. Para quem usa a Extensão de Diagnóstico do Azure, o agente MicrosoftMonitoringAgent costuma abrir handles em inetsrv.dll, exigindo que o serviço seja parado antes da remoção:

Stop-Service HealthService
Stop-Service hnsplusep

Depois da desinstalação do IIS, o HealthService volta a ser iniciado normalmente.

Dicas avançadas para automação

  • Inclua o script de remoção de Optional Features dentro de uma runbook do Azure Automation ou Pipe de DevOps para padronizar servidores clonados.
  • Valide a saída de Get-WindowsOptionalFeature com um if(($_.State -eq "Enable Pending") …) e aplique Restart-Computer -Force somente se necessário, reduzindo janelas de manutenção.
  • Incorpore um passo de DISM /Online /Cleanup-Image /AnalyzeComponentStore para monitorar tamanho do WinSxS e planejar anualmente a tarefa de trim.

Boas práticas de segurança pós‑remoção

Depois que o IIS sai da imagem, revise regras de firewall internas que antes permitiam tráfego nas portas 80 e 443. É comum esquecer ACLs abertas e, semanas depois, o servidor ser promovido a outro papel sem restrições mínimas de rede. Além disso, se você usa o serviço Windows Remote Management (WinRM) em modo HTTPS, precisará reinstalar apenas o módulo WinRM IIS Extensions ou migrar para self‑hosted listener via New-Item WSMan:\localhost\Listener, evitando nova instalação completa do IIS.

Conclusão

O erro 0x800f0922 ao remover o IIS no Windows Server 2016/2019 não é falha de hardware nem corrupção sistêmica; trata‑se de uma regressão introduzida pela KB 5036896, agravada por componentes opcionais residuais. A estratégia mais eficaz — desabilitar e remover todos os Windows Optional Features relacionados ao IIS antes de executar Uninstall‑WindowsFeature — isola as dependências e impede o rollback. Até que a Microsoft publique um patch definitivo, recomenda‑se adotar este fluxo como padrão de remoção, além de manter backups, validar atualizações em ambiente de testes e usar automação para garantir consistência em larga escala. Aplicando essas práticas, você elimina a função IIS de forma limpa e conserva servidores mais enxutos, estáveis e seguros.

Índice