IE クラッシュからの復活

2004年3月5日(金) by level
B ?

昨日の夜、帰宅後、妻が IE がクラッシュするので困っていると泣きついてきた。なんで IE なんか使っているんだと思いつつ話を聞いてみると、IE でしか使えない、あるアルバイト先会社のウェブ上の認証画面で確実に落ちるという。同様に複数のインターネットバンキングのログイン画面もだめだ。数日前まではうまく動いていたという。こういうときは、まずはウイルスチェックということで、Norton AntiVirus の最新データをダウンロードして、ディスクのスキャンをかけようとすると Norton AntiVirus 自身がクラッシュ! あらま。次に Windows Update をかけようとするとこれまたクラッシュ! うーむ、これは非常に困ったことになった。

最近、何かシステムに影響に与えるようなことをしたかと思い出してみても、Windows Update は1ヶ月前に行ったきりのような気がする。その後は特に怪しげなソフトをインストールした記憶はない。そういえば、Windows Update 後にシステムがおかしくなるようなケースがあったような気がして、Microsoft のサイトを探してみたが特にそれらしきものはなかった。

これは自力で修復するしかない。でも、OS の再インストールはいやだな。Windows XP には壊れたシステムを修復する機能が無かったっけ? スタートメニューから探してみると、アクセサリ→システムツールの中に「システムの復元」というのがあったので実行してみると、過去1週間おきくらいの復元ポイントに復元できるようだ。しかも安全に取り消すことができるとある。試しに2月14日を選んで実行してみると、しばらくディスクをがりがりいわせた後、再起動。変更されたファイル(フォルダ?)というのを見てみると、なぜか Firefox が Firefox(2) に変更されたとある。むっ、いやな予感。ログイン後の画面は正常だが、Firefox と Thunderbird は起動せず! これらのツールのインストールフォルダをのぞいてみると一部のファイルやフォルダがなくなっているようだ。これじゃ動くわけがない。肝心の IE はというと、やっぱりクラッシュ、AntiVirus もだめ。仕方ないので、元に戻した。どうやら正常に元の状態に戻ったようで Firefox と Thunderbird は正常に起動するようになった。が、結局振り出しに戻ったわけだ。

実は、IE がクラッシュする原因は、クラッシュ時のダイアログに出る詳細情報から mshtml.dll であることは分っている。このファイル、Windows フォルダの下で検索をかけてみると、3つのバージョンのファイルが計7個存在することが分った。最新版は System32 と System32/dllcache の下にあるものだ。どちらもサイズや日付、バージョンは同じだ。ちなみに、作成日付が 2004/1/29 となっているので、ファイル名から見ても例の URL 偽装の脆弱性に対する修正が入っているファイルのようだ。

このファイルが壊れているとすると、これを修復すればよいのだが、さてどうするべきか。試しに、最新の二つのファイルの差分をとってみることにする。さて、Windows でバイナリファイルの比較をするコマンドはあったかしら? ここは、迷わず、Cygwin 端末を開いて、od でダンプしたものを diff で比較してみることにする。結果は、、、ビンゴ!!! 連続する約1500バイトで差分が出た。やはりこのファイルが壊れているようだ。で、どちらのファイルが正常なのかが問題だ。それに、現在使用されているのはどちらのファイルだろうか?

両方のバックアップを取った上で、まず、dllcache の方のファイルを削除して再起動してみると、残念、症状は変わらず。そこで、dllcache にあったファイルを System32 にコピーして再起動してみると。パンパカパーン。みごと正常に動作するようになった。その後、丸一日使用した限りでは問題は出ていないようだ。これで一安心。

今回の問題の解決に要した時間は約90分であった。

3/7更新: 掲示板で matsu さんより指摘があり、IE が mshtml.dll でクラッシュする原因は

が関係するのではないか、というものでした。ただし、どちらも、原因が 2003-08-19 のサポート技術情報 - 824150 を基にしており、Windows Update をまめに実行している私の場合には当てはまらないように思えます。また、前者の3番目の記事には、mshtml.dll の最新版は、修正プログラム MS04-004/832894 で提供された 6.0.2800.1400 であると書いてありますが、私の環境で不具合のあった mshtml.dll のバージョンも同じ 6.0.2800.1400 であり、しかも、別のフォルダに同じバージョンで内容の異なるファイルが存在し、そちらでは問題なく動作していることから、何らかの原因でファイルが破損したと考えるのが妥当のように思えます。

いずれにせよ、情報提供ありがとうございました。

コメント (2)

1 7/05 15:05 takap
(c1) [2006/07/05 15:05:28] by takap

私も今日、IE7ベータ2で同様のエラーが発生し解決方法が見つからず四苦八苦していました。
IE7を削除して再インストール、システムの復元など考えられる方法は試してみたのですが、いっこうに正常に動く気配なく、操作のたびにmshtml.dllのエラーで落ちてしまいます。
そこでネットを探していてこちらのページにたどり着き、もしやと思い、system32のファイル(おそらくこちらがメインなのでしょう)にdllcacheのファイルをコピーしました。
そのままでは上書きできなかったので、一度コピー先ファイルをリネームしてから貼り付けしたら、無事コピーできました。
その後、おそるおそるIE7を起動すると全く問題なく動きます。
ホッとしました(*´∇`*)

こちらの情報にはとても感謝していますm(__)m

2 7/05 22:37 level@管理人
(c2) [2006/07/05 22:37:08] by level@管理人

このときは手順もきっちり覚えていたので、誰かの役に立つと思ってまとめておいたのですが、お役に立って何よりです。

トラックバック

トラックバックは検索対象外です。

この記事にリンクしているページ < >

  1. [6] http://mianeko2.blog19.fc2.com/blog-entry-190.html