Windows 更新遇到 0x80070306 錯誤

  最近在處理一台香港的 Windows Server 2025,原本只是 Windows Update 安裝 KB5120233 失敗沒想到最後連續研究了三天從 DISM 元件存放區Language PackPSFX hydration一路追到 CBS / CSI最後才靠 In-place Repair Upgrade(就地修復升級) 解決

  這次過程主要搭配 ChatGPT 與 Claude Code 協助分析 CBS Log 及建立離線測試環境中間做了不少假設也推翻了好幾個原本看起來很合理的方向因此把比較重要的過程記錄下來希望能幫到遇到類似問題的人

【系統環境】

  • Windows Server 2025 Standard Desktop Experience
  • 原始版本26100.2033 / 24H2
  • Servicing Stack26100.33288
  • 失敗更新KB5120233
  • Windows Update 原始錯誤0x80070306(Error 774)
  • 目標版本26100.33296
  • 系統語言en-US另有 zh-TW 語言元件
  • 實體伺服器主要服務為 SQL ServerIISWMS
  • 透過 WSUS 更新

  這台伺服器放在香港當地沒有 IT 人員所以也沒辦法很豪邁地直接重裝,呵。

【最初的錯誤】

Windows Update 安裝 KB5120233 時持續出現

0x80070306

一開始先檢查 Windows Component Store

DISM /Online /Cleanup-Image /CheckHealth
DISM /Online /Cleanup-Image /ScanHealth
DISM /Online /Cleanup-Image /RestoreHealth

結果確實發現元件存放區損壞RestoreHealth 又出現

0x800f0915
CBS_E_REPAIR_CONTENT_MISSING

從 CBS Log 往下追找到幾個舊版元件 payload 缺失包含 zh-TW Boot Manager MUIfsutil.exe.muikernel32.dll.mui 等後來另外建立一份含歷史更新版本的 WIM作為 Repair Source

DISM /Online /Cleanup-Image /RestoreHealth /Source:"<Mount>\Windows" /LimitAccess

這次終於修復成功ScanHealth 也變成 HealthyMicrosoft 官方也有說明可透過 /Source 指定良好的 Windows 映像作為 RestoreHealth 的修復來源

原本以為事情到這裡就結束了結果重新安裝 KB5120233還是 0x80070306

【繼續追 CBS / PSFX】

CBS Log 顯示更新在處理幾個 zh-TW 元件時失敗

Microsoft-Windows-MTF-CHT-Extra
ChtAdvancedDS.dll

Microsoft-Windows-Spelling-Dictionaries-Chinese-Latin-Main
datamap.0404.dat
ExpressiveInput.0404.lex

錯誤集中在

Forward Delta
DeltaDecompressBuffer
Error 774
0x80070306

因此一開始懷疑 zh-TW Language Basic 元件有問題也建立了多份離線 WIM 做 A/B 測試後來甚至逐一比對 WinSxS payload SHA256ManifestMUM/CATCOMPONENTS HiveDerivedDataCanonicalDataTrustedInstallerServicing Stack 與 Hardlink

但很有趣的是LIVE 主機會失敗幾乎所有離線映像都可以成功更新而且靜態內容比對幾乎全部一致

這時已經可以確定問題不是單純某一個 DLL 壞掉

【Language Pack 與 LCU 的安裝順序】

調查過程中另外注意到 Microsoft 對 Language Pack 的 servicing 順序有明確建議先安裝語言再安裝更新與應用程式如果是在已經整合 SSU / LCU 的 Windows 映像上才加入 Language PackMicrosoft 建議重新套用相關更新尤其安裝 Language Pack 後重新安裝最新 LCU否則可能發生錯誤而且如果該 LCU 原本已經安裝過Windows Update 不一定會再次提供需要手動重新安裝

這裡所說的是新增/安裝 Language Pack不是單純在 Windows 介面切換顯示語言這項官方建議也是我們一度懷疑更新順序與語言元件修訂鏈的原因之一

【幾個被推翻的假設】

  1. Parallel hydration failed 就是根因
    後來在一次完整成功的離線更新裡也看到大量 Hydration failed因此這比較像 CBS 的預先最佳化流程失敗並不一定致命
  2. 只是 zh-TW Language Pack 壞掉
    移除 Language Basic / OCR / Speech / TextToSpeech 後原本的 hydration error 確實消失但 KB5120233 接著改成

    0x800736B3
    STATUS_SXS_ASSEMBLY_NOT_FOUND
    CCSDirectTransaction::MarkTlcUnstaged

    而且失敗元件先後出現在 IIS 的 en-US LanguagePack 與其他 zh-TW LanguagePack因此無法再解釋成單一繁中套件問題

  3. SFC / DISM 顯示 Healthy 就代表 CBS 完全正常
    這次實際證明並非如此SFCScanHealthRestoreHealthStartComponentCleanup 後期都無法處理這個問題

最後能確認的是這台伺服器的 Component Store 裡部分 *-Deployment-LanguagePack 的 CSI / TLC 記帳狀態存在不一致但這已經超出一般 DISM 健康檢查能修復的範圍

【也試過往前裝往回拆 LCU】

為了確認是不是只有最新的 KB5120233 有問題我們後來也直接在 LIVE 環境測試較舊且仍被系統判定 Applicable 的 KB5046617(26100.2314)

DISM /Online /Add-Package /PackagePath:"KB5046617.msu" /NoRestart

ExitCode = 14003
0x800736B3
STATUS_SXS_ASSEMBLY_NOT_FOUND

KB5046617 比 KB5120233 早了一年以上仍然在相同類型的 CSI / TLC 流程失敗因此可以排除「只是最新 LCU 本身帶進壞元件」的假設

反方向也做過測試系統 Store 裡還殘留一個舊的 KB5043080 / RollupFix 26100.1742狀態為 Staged於是嘗試將它移除

DISM /Online /Remove-Package /PackageName:Package_for_RollupFix~31bf3856ad364e35~amd64~~26100.1742.1.10 /NoRestart

Error 14003
0x800736B3
STATUS_SXS_ASSEMBLY_NOT_FOUND

結果連「安裝較舊 LCU」與「移除既有舊 LCU」都會失敗而且都碰到相同家族的 CSI 錯誤這個驗證很重要因為它表示問題已經不是單一 KB而是本機 Component Store 的 servicing 記帳狀態

【最後解決方法In-place Repair Upgrade】

研究到這裡後繼續逐一修 CBS 已經有點像打地鼠因此最後決定改用 Windows Server 的 就地修復升級

Microsoft 官方文件說明In-place Upgrade 可以從 Windows Server 安裝媒體執行 setup.exe並保留檔案、설정、應用程式與 Server Roles這次不是直接使用原始 26100.2033 媒體而是另外建立

WS2025-LangRepair

其中 install.wim 使用先前建立的 LangTest.wim已整合

  • Windows Server 2025 Standard Desktop Experience
  • zh-TW Language Pack / Basic
  • KB5044284
  • KB5120233
  • Build 26100.33296

目的就是讓 Repair Upgrade 直接落地到 26100.33296而不是修回 2033 그 후,再走一次目前已經確定會出錯的 CBS 更新流程

正式執行前先做 Compatibility Scan

setup.exe /auto upgrade /compat scanonly /dynamicupdate disable

결과:

0xC1900210
CompatHardBlockedProviders = 0

依 Microsoft 的 Windows Setup 文件使用 /Compat ScanOnly 且沒有相容性問題時回傳 0xC1900210 是正常結果

因為這是一台遠端 Production Server正式執行前另外完成 SQL Database Backup / VerifyIIS 與 DNS 備份啟用 Local Administrator暫時移除 ESET確認 RAID 開機驅動以及預先確認 RDP / WinRM

正式執行

WS2025-LangRepair\setup.exe /Auto Upgrade /DynamicUpdate Disable /MigrateDrivers All /ShowOOBE None /Telemetry Disable /NoReboot

/DynamicUpdate Disable 是避免 Setup 再下載新的更新/NoReboot 則讓線上階段完成後先停住再自行停止 IISCHECKPOINT Database停止 SQL Service最後才手動重新開機這兩個參數都有 Microsoft 官方文件可查

16:47  開始 Repair Upgrade
17:25  線上階段完成
17:35  手動重新啟動
17:38  新系統開機

離線階段意外地不到三分鐘修復後版本

26100.2033 26100.33296

SQL 17 個 Database 全部 ONLINEIISWMSDNSDomain Trust 與網路設定也都正常

另外遇到兩個小問題

  1. TermService 升級後變成 Manual 且沒有啟動造成 RDP 一度無法連線手動啟動並改回 Automatic 即可
  2. Windows 啟用狀態掉了,발생 0xC004F057重新輸入伺服器機身貼紙上的 Product Key 後即恢復啟用推測是自製映像內的 Key 與原機授權不符

【最後驗證】

Repair Upgrade 完成後再讓 Windows Update 自己重新檢查更新這次 KB5120233 由 Windows Update 正常下載並安裝

ID 19
Windows 已成功安裝:
2026-08 安全性彙總更新 KB5120233

新的 CBS Log 中

0x80070306                    = 0
0x800736b3                    = 0
Hydration failed              = 0
STATUS_SXS_ASSEMBLY_NOT_FOUND = 0

也就是說這次不只是用新版映像把 Build 蓋過去而是 Windows 本身的 CBS / Windows Update servicing 能力真的恢復正常了

【結論】

  這次花了三天最初只是 0x80070306一路從缺檔Language PackPSFXHydration最後追到 CSI / TLC 的狀態不一致

  如果未來再遇到類似情況多個不相干元件都在 MarkTlcUnstaged 出現 STATUS_SXS_ASSEMBLY_NOT_FOUND而 SFCDISMComponentCleanup 都正常或無效我大概不會再花三天逐一修元件而會更早評估 In-place Repair Upgrade

  當然Production Server 做 Repair Upgrade 前備份開機磁碟驅動遠端登入方式以及失敗後的救援方案都還是要先準備好

《관련 링크》

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 항목 표시 *

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터 처리 방법 알아보기.