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.
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:
- No Server Manager ou em PowerShell, o administrador executa:
Uninstall‑WindowsFeature -Name Web-Server -Restart
- O assistente indica sucesso (“Removal completed”).
- O servidor reinicia, mas antes de concluir a fase First Boot exibe “We couldn’t complete the features”.
- 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
Fator | Efeito observado |
---|---|
Atualização cumulativa KB 5036896 | Introduz 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 ativos | Componentes 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 abertos | Pastas %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
eDISM /RestoreHealth
. Ambos concluem sem erros, pois o problema não é corrupção de sistema, mas dependências pendentes. - Excluir manualmente
C:\Windows\System32\inetsrv
eC:\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.
- 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. - 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. - Permitir o reboot completo
O processo de reinicialização concluirá sem a mensagem de falha. Após logon, confirme que os serviçosW3SVC
,WAS
eFTPSVC
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ção | Objetivo |
---|---|
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
- 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. - Verificar o estado do serviço W3SVC antes do reboot:
sc query W3SVC
Se aparecer como STOP_PENDING, aguarde ou forcesc stop W3SVC /t
para derrubar dependências. - Coletar logs detalhados para o Suporte Microsoft
ArquivosC:\Windows\Logs\CBS\CBS.log
eC:\Windows\Logs\DISM\dism.log
mostram carimbos de tempo e códigos de falha que o engenheiro de suporte pode correlacionar aPackageforKB5036896
.
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 umif(($_.State -eq "Enable Pending") …)
e apliqueRestart-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.