WindowsUpdateが進まない(svchost.exeがCPUを100%占有する)
一時期、Windows XPで「WindowsUpdateが進まない」という現象が頻発した。Microsoft Updateの画面が「最新の更新プログラムを確認しています」の画面のままで、長時間待たされる。時には何時間待ってもそのままということすらある。
遅いパソコンの場合には操作不能になるほど反応が悪くなり、最悪の場合には電源ボタンを長押しして強制シャットダウンするしかなくなってしまう。タスクマネージャーで見ると、CPU使用率が高い状態が続いている(100%の状態が続く場合も)。
この問題の厄介なところは、ユーザが明示的にWindowsUpdate(Microsoft Update)を起動しなくても、自動更新が有効になっていると Automatic Updatesサービス(wuauserv)が動いて同じ現象が起きることだ。Windows XPを起動してしばらくすると、急に反応が悪くなってしまう。
この現象、発生時期によって原因も対策も違うようだ。原因をいくつか挙げる。
① SoftwareDistributionフォルダの肥大化。
② SoftwareDistributionやCatRoot2フォルダの破損。
③ Internet Explorer の累積的なセキュリティ更新プログラムの問題。
④ Windows Genuine Advantage (正規 Windows 推奨プログラム) 通知ツール (KB905474)の問題。
このうち①と②は、2000年代後半から起きていた。XP以外にもVistaや7でも似た現象が起きていた。③と④は2013年後半から14年初頭にかけて発生していた。(どちらも、当時から現在まで発生しっぱなしという事例だってあるだろう)。
SoftwareDistributionフォルダのリネーム
SoftwareDistributionフォルダには過去にWindowsUpdateでインストールした更新プログラムの履歴が保存されている。これはどの更新プログラムをインストールするか判断するために使われる。ただ、毎月新しい更新プログラムが供給されているため、このフォルダはどんどん肥大していく。するとWindowsUpdateはその履歴を調べるために多くの時間を費やしてしまう。
しかも、このフォルダの内容が破損することがある(とMicrosoftoも認めている)。それが影響して、WindowsUpdateでエラーが発生したり、終わらなくなったりするわけだ。
対策としては、このフォルダを削除する。それにより更新プログラムのインストール履歴は失われてしまうが、WindowsUpdateの動作は軽快になる・・・というもの。(この対策を行うと更新履歴が消えてしまうので、必要なら履歴のページを保存しておかねばならない)。
- Automatic Updates と Background Intelligent Transfer Service を停止する。
- %SystemRoot%\SoftwareDistribution フォルダをリネームする。
- Automatic Updates と Background Intelligent Transfer Service を開始する。
GUIを使ってやってもいいが、コマンドラインのほうが早い。
net stop wuauserv net stop bits ren %SystemRoot%\SoftwareDistribution SoftwareDistribution.old net start bits net start wuauserv
(この二つのサービス以外がフォルダにアクセスしていると、renがエラーになる。その場合には、セーフモードで再起動してから行う。)
すでに SoftwareDistribution.old フォルダが存在する場合は、事前に
rmdir /s /q %SystemRoot%\SoftwareDistribution.old
とやって、削除しておく(正常に稼働するようなったら、後でこれも削除しておく)。
さらには、CatRoot2も削除すべきだという情報もある。これは Cryptographic Services が使っているフォルダで、Windows ファイルの署名を確認しているが、このフォルダの内容が破損することもあるらしい。こちらも同様にサービスを停止してフォルダを削除する。それを追加すると・・・
net stop wuauserv net stop bits net stop cryptsvc ren %SystemRoot%\SoftwareDistribution SoftwareDistribution.old ren %SystemRoot%\system32\CatRoot2 CatRoot2.old net start cryptsvc net start bits net start wuauserv
すでに CatRoot2.old フォルダが存在する場合は、事前に
rmdir /s /q %SystemRoot%\System32\CatRoot2.old
とやって、削除しておく。
情報源:
- WindowsUpdateを修復する方法(コマンド編) (seek.jp)
IEの累積パッチとWGA通知ツール(KB905474)
こちらは、2013年後半から起きた障害で、やはりWindowsUpdateが進まず、svchost.exe がCPUを占有してしまう。
MicrosoftのWGA(正規 Windows推奨)プログラムはいろいろ問題を起こしてきたが、今回もWGAがらみのようだ。IE8が最新でない + WGA通知ツール(KB905474)がインストールされていない、という条件でWindowsUpdateを行うと、この「svchost.exeがCPUを100%占有する」という問題が発生するようだ。
解決策としては、
- WGA通知ツール(KB905474)をインストールする。
- Internet Explorerの累積パッチをインストールする。
なのだが、WindowsUpdateが使えなくなっている以上、それらのオフラインインストーラを探さなくてはならない。
IEの更新パッチの最新版は2014年4月の MS14-018 で、IE8用はここからダウンロードできる。
Internet Explorer 8 for Windows XP 用セキュリティ更新プログラム (KB2936068)
問題は、Windows Genuine Advantage (正規 Windows 推奨プログラム) 通知ツール (KB905474) のオフラインインストーラが見つからないことだ。日本語の最新版を探しても、ネット上に見つけることができなかった1)。英語版を紹介しているサイトもあった。
多くのサイトが、英語版のダウンロードページとして
http://www.microsoft.com/en-us/download/details.aspx?id=20888
を案内しているが、すでにそのページはない。2) 仕方ない、arcive.orgのアーカイブから辿って、これを使わせてもらおう。
https://web.archive.org/web/20141026040900/http://download.microsoft.com/download/D/2/6/D2691B35-E8E4-467A-8A4A-C6DE09860204/WindowsXP-KB905474-ENU-x86.exe 3)4)
なんとか日本語版の新しいのを見つけたので載せておく(ダウンロード後に WindowsXP-KB905474-JPN-x86.exe にリネームする)。
http://download.windowsupdate.com/msdownload/update/software/crup/2009/03/windowsxp-kb905474-jpn-x86_308c72173c772b5c7ef3a8643559d103e840c29c.exe (Version:1.9.40.0 - Build Date:3/10/2009)
「Genuine Advantage (正規 Windows 推奨プログラム) 通知ツール (KB905474)」がインストールされていないようなら、上記でダウンロードした WindowsXP-KB905474-JPN-x86.exe をインストールする。(これについてはProfessionalのみで、Homeは不要のようだ)。
さらに、「Internet Explorer 8 for Windows XP 用セキュリティ更新プログラム (KB2936068)」IE8-WindowsXP-KB2936068-x86-JPN.exe をインストールする。
情報源:
- Windows XP や Windows Server 2003 環境において、Windows Update 実行時に Svchost.exe の CPU 使用率が 100 % となる、時間を大幅に要する (Microsoft Japan WSUS Support)
- WindowsXP Proを再インストールしたときのメモ (記憶用紙)
一方、https://web.archive.org/web/http://download.microsoft.com/download/5/3/3/533a40be-936b-4267-b043-2f04233a78a6/WindowsXP-KB905474-ENU-x86.exe にあるのは Version 1.5.540 - Build Date 6/19/2006 という古いもの。