新・日々録 by TRASH BOX@Eel このページをアンテナに追加 RSSフィード

2012-05-09

KB2686509の適用失敗についてのメモ。多分罠は2つ

本日のMicrosoft UpdateにてKB2686509の適用に失敗した。多分Windows Updateの時代を含めて初めて失敗したので、記録を残しておく。

http://support.microsoft.com/kb/2686509 を読むと、こんな記述がある。

This update enumerates all the keyboard layout files that are registered on your computer, and then it verifies that they are all in the %Windir%\System32 folder.

http://support.microsoft.com/kb/2686509

どうもKB2686509は適用時にこんなことをやっている模様。

  1. レジストリに登録されてるキーボードレイアウトファイルを列挙。
  2. %Windir%\System32 の中にキーボードレイアウトファイルの現物があるかチェック。

%Windir%\KB2686509.log の中に堂々と「RegQueryValueEx」だなんて名前が出てくるので、レジストリの中身を舐めているのは間違いないと思う。

同ページの他のセクションから推測するに、以下のレジストリキーがチェック対象らしい。

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layout
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts

このキー以下(サブキーを含む)の値を片っ端からチェックしているのではないかと思う。

このチェックは「レジストリに登録されているものの、%Windir%\System32 以下に現物が存在しないキーボードレイアウトファイルを炙り出す」という目的で行っていて、且つこのチェックによって更新が失敗することはMicrosoftも想定済み(むしろそうなることが目的?)なようで、先程のページにも色々と記述がある。

この場合は %windir%\Faultykeyboard.log が生成されているので、参考にして修正を行う。ページには「足りないキーボードレイアウトファイルを %Windir%\System32 にコピーする(但しコピーする前にそのファイルが信頼に足るものか確認してね)」的なことが書いてあるが、これみたいに「該当するファイルを使用しているレジストリエントリを削除」でもOKらしい。

さて、ここからは推測(という名の妄想)混じり。

Microsoft Updateしたらageるスレ 72を見ていると「キーボードレイアウトを変更していると失敗する」という書き込みがある。

Windows XPにはレジストリを弄ってキーボードレイアウトを変更するというネタがあって、それが「HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layout」直下に「Scancode Map」という名前で値を設定する、という方法だ*1

今回のKB2686509にとって「Scancode Map」は予期しない値で、予期しない値がレジストリに存在する為に更新に失敗する(そういうロジックで更新プログラムが実装されている)のではないだろうか? だから一旦その値そのものを削除(値を空にするのではなく)してから更新すると成功する――と考えると辻褄が合う気がする。

「予期しない」という言葉を使ったのは http://support.microsoft.com/kb/2686509 にこのようなケースに対する対応策が書かれてないから。「Scancode Map」があって失敗した場合は %windir%\Faultykeyboard.log は生成されない*2し、仮に生成されたとしても原因は「キーボードレイアウトファイルが無い」ではないので役に立たない。

しかもどちらが原因でもエラーコードは同じなんだよなあ。

という訳でKB2686509に失敗した場合は、

  1. 「Scancode Map」のような予期しない値がレジストリに存在しないか?
  2. キーボードレイアウトファイルが欠けていないか?

この順番に二段構えぐらいで臨むべきかと思う。

ちなみに私のPCは「Scancode Map」があって失敗。この値のみのバックアップは作成済みなので、値を削除してからMicrosoft Updateをかけて、後でリストアした。合計4台なので面倒だった。

*1:この方法ってVista以降でも有効なのだろうか?

*2:手元の環境での挙動。

とーちゃんとーちゃん 2012/05/10 06:28 〜\CurrentControlSet\Keyboard Layout(s)ではなく、
〜\CurrentControlSet\Control\Keyboard Layout(s)ではないでしょうか。

eel3eel3 2012/05/10 09:58 おお、「Control」が抜けてましたね。
ご指摘ありがとうございます。

http://support.microsoft.com/kb/2686509 からコピペしたら、元が間違ってました……。

おのれおのれ 2012/05/10 22:59 参考になりました。
なお、Scancode mapはうちのWindows7で使用できています。

とーちゃんとーちゃん 2012/05/10 23:08 私はキーボードレイアウトを変更した覚えもなく「Scancode Map」も無いので、(前回コメント時点では)解決していませんでしたが、その後次の2ちゃんねるの記事で解決しました。

http://toro.2ch.net/test/read.cgi/win/1329400281/
Microsoft Update失敗したらageるスレ 28
この中の204番です。

(抜粋)
・HKEY_LOCAL_MACHINE\System\CurrentControlSet\Keyboard Layoutsをエクスポート
・Keyboard Layoutsのサブキーの内、Layout Fileの値が、faultykeyboard.logに記述のあるdllのファイル名であるものを全て削除
・KB2686509をインストール
・エクスポートしたKeyboard Layoutsをインポート

とーちゃんとーちゃん 2012/05/12 02:36 失礼しました。2012/05/10 23:08のコメントで、「Control」が抜けていました。
2012/05/10 06:28に指摘しておきながら、自分で同じ過ちを犯すとは...
引用とはいえ、お恥ずかしい。

マッカーシーマッカーシー 2012/05/12 19:07 とーちゃんさん、おかげさまで助かりました!
私もこちらの原因だったようで、検索してもscancode mapを削除しか見つからなかったので途方に暮れていたところです。
なぜこんなことになったのかよくわかりませんが、ご紹介いただいた無事インストールできました。
2chの当該スレッド204様もありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証