WSUS を使って Windows 10 Version 1607 をプッシュするときの「0xc1800118」エラー

適用対象: Windows 10, version 1607

ホーム ユーザー向け: この記事は、テクニカル サポート担当者および IT プロフェッショナルを対象としています。 問題の解決方法を探している場合は、Microsoft コミュニティにお問い合わせください

現象


次のようなシナリオがあるとします。
 
  • お使いの環境で Windows Server Update Services (WSUS) が構成されています。
  • WSUS サーバーに 更新プログラム 3159706 をインストールして、Windows 10 の新しい機能更新プログラムの暗号化解除を有効にします。
  • Windows 10 Version 1607 用の機能更新プログラムを承認します。
  • WSUS クライアントが機能更新プログラムを検出して C:\Windows\ccmcache にダウンロードします。ファイルは C:\Windows\SoftwareDistribution\DataStore に正常に読み込まれます。
このシナリオでは、インストールが開始され、ファイルが C:\$Windows.~BT に展開されます。 ただし、処理が失敗して次のエラー コードが返されます。
 
0xC1800118


さらに、setuperr.log ログと setupact.log ログに次のエントリが記録されることがあります。

setuperr.log から:
 <Date> <Time>, Error SP CSetupPlatform::ResurrectNewSystem: Cannot resurrect new system.: Win32Exception: \\?\C:\$Windows.~BT\Sources\NewSystem.dat: The system cannot find the file specified. [0x00000002] __cdecl UnBCL::FileStream: :FileStream(const class UnBCL::String *,enum UnBCL::FileMode,enum UnBCL: :FileAccess,enum UnBCL::FileShare,unsigned long) [gle=0x00000002] <Date> <Time>, Error CONX Windows::Compat::Appraiser::SetupAppraiser: :StopEtlLogger (2884): Waiting on generaltel process failed: [258].[gle=0x00000102] <Date> <Time>, Error MOUPG RecoverCrypto: File is encrypted, but no key was provided. <Date> <Time>, Error MOUPG CDlpActionRecoverCrypto::DoCrypto(1713):  Result = 0xC1800118 <Date> <Time>, Error MOUPG CDlpActionRecoverCrypto::ExecuteRoutine(2465):  Result = 0xC1800118 <Date> <Time>, Error MOUPG CDlpActionImpl<class CDlpErrorImpl<class CDlpObjectInternalImpl<class CUnknownImpl<class IDlpAction> > > >: :Execute(441): Result = 0xC1800118
From setupact.log:
 <Date> <Time>, Error MOUPG RecoverCrypto: File is encrypted, but no key was provided. <Date> <Time>, Error MOUPG CDlpActionRecoverCrypto::DoCrypto(1713): Result = 0xC1800118 <Date> <Time>, Error MOUPG CDlpActionRecoverCrypto::ExecuteRoutine(2465): Result = 0xC1800118 <Date> <Time>, Warning MOUPG CSetupDiagnostics::ReportData - Not reporting WINDLP data point [0x2101] <Date> <Time>, Warning MOUPG CSetupDiagnostics::ReportData - Not reporting WINDLP data point [0x2100] <Date> <Time>, Error MOUPG CDlpActionImpl<class CDlpErrorImpl<class CDlpObjectInternalImpl<class CUnknownImpl<class IDlpAction> > > >: :Execute(441): Result = 0xC1800118 <Date> <Time>, Info MOUPG RecoverCrypto: Leaving Execute Method <Date> <Time>, Error MOUPG CDlpTask::ExecuteAction(3243): Result = 0xC1800118Error Details Hex code - 0xc1800118 Symbolic Name - WINDLP_E_RECOVERCRYPTO_WIM_DECRYPTKEY_MISSING Error Description - No key was provided to decrypt the specified WIM file 

原因


この問題は、Windows 10 Version 1607 用の更新プログラムが暗号化されているものの、WSUS データベースで暗号化されていると表示されない場合に発生します。 この問題は、KB 3159706 を適用する前に更新プログラムを同期すると発生することがあります。
 

回避策


この問題を回避するには、環境のすべての WSUS サーバーで次の手順を実行します。
 

  1. WSUS が正常な状態ではないかどうか検出します。 これを行うには、次のクエリを実行します。 
     
    select Count(*)
    from tbFile as f, tbFileForRevision as fr, tbRevision as r, tbUpdate as u, tbProperty as p
    where f.FileDigest = fr.FileDigest and fr.RevisionID = r.RevisionID and r.LocalUpdateID = u.LocalUpdateID
    and p.RevisionID = r.RevisionID and 
    (f.FileName like '%15063%.esd' or f.FileName like '%14393%.esd' or f.IsEncrypted = 1) 
    and f.DecryptionKey is null
    and p.PublicationState = 0

    注: 結果が「TotalResults > 0」エントリを表示する場合は、サーバーが正常な状態ではないことを示しています。
  2. WSUS が正常な状態ではない場合は、リストされている順序に従い、示されている場所で次の手順を実行します。
     


    手順の順序

    1. アップグレードの分類 (USS またはスタンドアロンの WSUS) を無効にします。
    2. Windows PowerShell ISE (管理者)で、すべての Windows 10 用の更新プログラムを拒否します。
    3. SUSDB から Windows 10 用の更新プログラムを削除します。
    4. WSUS データベースの tbFile テーブルからファイルを削除します。
    5. Windows PowerShell の分類をもう一度有効にします。
    6. 同期を強制的に実施します (PowerShell)。
    • 手順 1: アップグレードの分類 (USS またはスタンドアロンの WSUS) を無効にします。
      Get-WsusClassification | Where-Object -FilterScript {$_.Classification.Title -Eq “Upgrades”} | Set-WsusClassification -Disable 
    • 手順 2: Windows PowerShell ISE (管理者)で、すべての Windows 10 用の更新プログラムを拒否します。
      [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();$wsus.GetUpdates() | Where {$_.UpdateClassificationTitle -eq 'Upgrades' -and $_.Title -match 'Windows 10'} `| ForEach-Object {$_.Decline(); Write-Host $_.Title declined} 
    • 手順 3: SUSDB から Windows 10 用の更新プログラムを削除します。

      注: 階層の最上位にある WSUS サーバーで最初に削除を実行してください。 それから階層の下位へと進みます。 そうしなければ、次回の同期試行時に USS よって削除が置き換えられることがあります。
      [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();$wsus.GetUpdates() | Where {$_.UpdateClassificationTitle -eq 'Upgrades' -and $_.Title -match 'Windows 10'} `| ForEach-Object {$wsus.DeleteUpdate($_.Id.UpdateId.ToString()); Write-Host $_.Title removed}
    • 手順 4: WSUS データベースの tbFile テーブルからファイルを削除します。 WSUS データベースで、SQL Server Management Studio の次のコマンドを実行します。
      declare @NotNeededFiles table (FileDigest binary(20) UNIQUE)insert into @NotNeededFiles(FileDigest) (select FileDigest from tbFile where FileName like '%.esd%'  except select FileDigest from tbFileForRevision)delete from tbFileOnServer where FileDigest in (select FileDigest from @NotNeededFiles)delete from tbFile where FileDigest in (select FileDigest from @NotNeededFiles)
    • 手順 5: Windows PowerShell の分類をもう一度有効にします。
      Get-WsusClassification | Where-Object -FilterScript {$_.Classification.Title -Eq “Upgrades”} | Set-WsusClassification
    • 手順 6: 同期を強制的に実施します (PowerShell)。
      $s = Get-WsusServer$sub = $s.GetSubscription()$sub.StartSynchronization()
  3. System Center Configuration Manager (ConfigMgr) を使っている場合は、次の手順を実行します。
     
    1. 階層の最上位にある ConfigMgr サーバーで<sccm Install directory>\inboxes\wsyncmgr.box を開きます。
    2. Wsyngmgr.box フォルダーで、「FULL.SYN」の名前の付いたファイルを作成します (このファイルは ConfigMgr を強制的に実施して、更新プログラムの完全同期を行います)。 wsyncmgr.log を監視してファイルが実行されたことを確認します。
  4. 各クライアント上で次を実行します。
     
    1. 管理者特権を持つコマンド プロンプト ウィンドウで、次のコマンドを実行します。

      net stop wuauserv
    2. 次のコマンドを実行します。

      del %windir%\SoftwareDistribution\DataStore\*


      注: このコマンドはクライアントからの完全スキャンも強制的に実施します。
    3. ドライブ C に隠し ~BT フォルダーがないことを確認します。ある場合は、このフォルダーを削除します。
    4. 次のコマンドを実行します。

      net start wuauserv