事象

.Net Framwork 3.5 SP1(KB951847)のインストールに失敗
サーバーマネージャの「役割」「機能」欄でエラー

発生日時

2012/04/05
Windows Updateの自動更新でほったらかしだっだのでもっと前かも・・・

経緯と調査

Windows Server 2008において.Net Framwork 3.5 SP1(KB951847)のインストールに失敗しつづけていることに気がつく。

WEBでの情報からすると、.Net Frameworkを削除してスタンドアロンパッケージから入れ直すといいらしい。

サーバマネージャから削除できたような気がして確認してみると、今度はサーバマネージャの「役割」「機能」がエラーになって参照できなくなっている。
サーバマネージャのイベントログを確認すると、以下のようなレコード(イベントID: 1601)があった。
システムの状態を検出できませんでした。予期しない例外が見つかりました:
System.Runtime.InteropServices.COMException (0x800B0100): サブジェクトに署名がありませんでした。 (HRESULT からの例外: 0x800B0100)
   場所 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   場所 Microsoft.Windows.ServerManager.ComponentInstaller.CreateSessionAndPackage(IntPtr& session, IntPtr& package)
   場所 Microsoft.Windows.ServerManager.ComponentInstaller.InitializeUpdateInfo()
   場所 Microsoft.Windows.ServerManager.ComponentInstaller.Initialize()
   場所 Microsoft.Windows.ServerManager.Common.Provider.Initialize(DocumentCollection documents)
   場所 Microsoft.Windows.ServerManager.ServerManagerModel.InternalRefreshModelResult(Object state)
WEBで調べると、「システム更新準備ツール」を導入すると直ることがあるとの情報があった。
導入してみると、「c:\windows\logs\CBS」に「CheckSUR.log」が作成され、以下のような内容があった。
=================================
Checking System Update Readiness.
Binary Version 6.0.6002.22574
Package Version 14.0
2012-04-05 12:48

Checking Windows Servicing Packages

Checking Package Manifests and Catalogs

Checking Package Watchlist

Checking Component Watchlist

Checking Packages
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Microsoft-Windows-PowerShell-ISE-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Microsoft-Windows-PowerShell-WTR-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Microsoft-Windows-WinRM-IIS-Extensions-Downlevel-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Package_for_KB950099_server~31bf3856ad364e35~x86~~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Windows-Management-Framework-Core-MiniLP~31bf3856ad364e35~x86~ja-JP~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Windows-Management-Framework-Core-TopLevel~31bf3856ad364e35~x86~~7.0.6002.18191.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Windows-Management-Framework-Core~31bf3856ad364e35~x86~ja-JP~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Windows-Management-Framework-Core~31bf3856ad364e35~x86~~7.0.6002.18181.mum		
(f)	CBS MUM Missing	0x00000002	servicing\Packages\Windows-Management-Protocols-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum		

Checking Component Store

Summary:
Seconds executed: 560
 Found 9 errors
  CBS MUM Missing Total count: 9

Unavailable repair files:
	servicing\packages\Microsoft-Windows-PowerShell-ISE-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum
	servicing\packages\Microsoft-Windows-PowerShell-WTR-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum
	servicing\packages\Microsoft-Windows-WinRM-IIS-Extensions-Downlevel-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum
	servicing\packages\Package_for_KB950099_server~31bf3856ad364e35~x86~~7.0.6002.18181.mum
	servicing\packages\Windows-Management-Framework-Core-MiniLP~31bf3856ad364e35~x86~ja-JP~7.0.6002.18181.mum
	servicing\packages\Windows-Management-Framework-Core-TopLevel~31bf3856ad364e35~x86~~7.0.6002.18191.mum
	servicing\packages\Windows-Management-Framework-Core~31bf3856ad364e35~x86~ja-JP~7.0.6002.18181.mum
	servicing\packages\Windows-Management-Framework-Core~31bf3856ad364e35~x86~~7.0.6002.18181.mum
	servicing\packages\Windows-Management-Protocols-Package~31bf3856ad364e35~x86~~7.0.6002.18181.mum
	servicing\packages\Microsoft-Windows-PowerShell-ISE-Package~31bf3856ad364e35~x86~~7.0.6002.18181.cat
	servicing\packages\Microsoft-Windows-PowerShell-WTR-Package~31bf3856ad364e35~x86~~7.0.6002.18181.cat
	servicing\packages\Microsoft-Windows-WinRM-IIS-Extensions-Downlevel-Package~31bf3856ad364e35~x86~~7.0.6002.18181.cat
	servicing\packages\Package_for_KB950099_server~31bf3856ad364e35~x86~~7.0.6002.18181.cat
	servicing\packages\Windows-Management-Framework-Core-MiniLP~31bf3856ad364e35~x86~ja-JP~7.0.6002.18181.cat
	servicing\packages\Windows-Management-Framework-Core-TopLevel~31bf3856ad364e35~x86~~7.0.6002.18191.cat
	servicing\packages\Windows-Management-Framework-Core~31bf3856ad364e35~x86~ja-JP~7.0.6002.18181.cat
	servicing\packages\Windows-Management-Framework-Core~31bf3856ad364e35~x86~~7.0.6002.18181.cat
	servicing\packages\Windows-Management-Protocols-Package~31bf3856ad364e35~x86~~7.0.6002.18181.cat
見た感じ、管理ツールの動作に必要なファイル群が、どういう訳か消えてしまっているよう読み取れる。
なんで消えた?というのはさておき、これを復旧するにはどうすべきか。

対策作業

これらのファイル名からサーバ管理機能のファイル群であろうと推測がつくので、「Windows Server 2008 用の Windows PowerShell 2.0 および WinRM 2.0」(KB968930)をダウンロードしてきて再インストールを試みる。
が、「この更新プログラムはお使いのコンピュータには適用できません」とでた。
仕方がないので、ダウンロードしてきた.msuの拡張子を.cabに変更して、中の.cabファイルを取り出す。
とりだした.cabをさらに解凍すると中から目的の.mumファイルと.catファイルがでてきた。
先ほどのログに出てきた目的のファイルのみを「c:\windows\servicing\packages」に入れればいいわけだが、残念ながらいきなりはコピーできない。
なぜならTrustedInstallerによって保護されているから。
段取りとしては、
  1. 目的のプロパティでセキュリティを編集し、所有者を「TrustedInstaller」から「administrators」に変更する。
    takeown /F filename...
  2. administratorsに書き込み権限を付与
    icacls filename... /grant administrators:F
  3. 先ほどのファイルをコピーする。
  4. administratorsの書き込み権限を剥奪。(継承に戻す)
    icacls filename... /inheritance:e
  5. 所有権を「TrustedInstaller」に戻す。
これで準備完了。
追記 おなじ構成のサーバがあるなら、そこからファイルをコピーして持ってきた方が早いことに気がついた。
CABの中に、必要なファイルがすべて入っているとは限らない。

解決

再度サーバマネージャを開くと、ちゃんと「役割」「機能」が表示されるようなった。
ついでにWindows Updateを試すと今度はエラーになっていた「.Net Framework 2.5 SP1」もすんなりインストールに成功。
さらに更新プログラムの再検索をすると、さきほどインストールできなかった「WinRM 2.0とPowerShell 2.0」もあらためて候補に出てくるではないか。
これもインストールしたら作業は終了。