PR

 筆者は,ホーム・ネットワークで複数のコンピュータを使用している。ゲーム用,開発用,画像・ビデオ管理用---といった具合である。最近,あるパソコンを使っているときに,Windowsエクスプローラで特定のフォルダを開いてその内容をスクロールすると,一時的にエクスプローラがハングして,長いときで1分間その状態が続くという現象が発生するようになった。エクスプローラのハングはよくあることだし,最初の数回はエクスプローラのいつもの奇行だと思って無視していた。しかし,ハングに規則性があることに気が付いたので,何かが壊れたのではないかと疑問を持ち,調査することにした。

 注:本記事は,筆者であるMark Russinovich氏が運営する「Mark's Sysinternals Blog」 で人気があった記事の要約であり,原文は米Windows ITPro Magazineの2006年6月号に掲載された。ブログの書き込みの全文は「The Case of the Intermittent (and Annoying) Explorer Hangs」で読める。

 まず最初に,Sysinternals(訳注:筆者のRussinovich氏が経営する米Wininternalsのフリーウエア部門。同社は2006年7月に米Microsoftに買収された)の「Process Explorer」というツールを使って,ハングしているエクスプローラのスレッドを調べ,ハングの原因につながる手掛かりを探した(筆者が実行した手順とその結果についてはブログ全文「The Case of the Intermittent (and Annoying) Explorer Hangs」を参照してほしい)。

 その結果,エクスプローラは,筆者が開いたフォルダに表示するアイコンを取得するために,ネットワーク・パスにアクセスを試みていることが分かった。このことから,そのネットワーク・パスが有効ではなく,エクスプローラがハングしているように見えるのはリモート・コンピュータからの応答待ちで待機しているのではないかと推測した。

エクスプローラが「存在しないネットワーク・パス」を参照していた理由は?

 次に,Sysinternalsの「Filemon」というツールを使って,エクスプローラがアクセスしようとしているネットワーク・パスを特定し,エクスプローラがアイコンを取得するためにネットワーク・パスにアクセスする理由を探った。Filemonのトレース結果を見ると,Developmentというコンピュータ名の付いた開発用パソコン上のパスが「不正なネットワーク・パス」と判断されていたが,それにはもっともな理由があった。数日前に,筆者はこの開発用パソコンを引退させていたのだ。

 残された唯一の疑問は,エクスプローラがなぜ引退したコンピュータを参照しようとしていたのか,ということだった。その答えは,レジストリにあった。それを調べるには,regeditを使ってそのパスを検索するか,Sysinternalsの「Regmon」というツールを使って参照を監視する方法の2つがあった。ここでは後者を使うことにして,まずRegmonを起動し,「development」というコンピュータ名でフィルタリングを設定した。ハングを引き起こすフォルダを最新の情報に更新したところ,Regmonの出力に,次のエントリが表示された。

QueryValue HKCR\PSP5.BrowserFile\DefaultIcon\{Default}
SUCCESS
"\\Development\C\PAINTS~1\Psp.exe,0"

 これが答えだった。筆者は長い間,画像ビューワとして古いバージョンの「Corel Paint Shop Pro」を愛用していた。必要な機能はすべて備わっていたし,インストーラを実行しなくても使うことができたからだ。実行可能ファイルPsp.exeを実行するだけで,Paint Shop Proが設定を自動的に構成して,ネットワーク共有からでも正常に動作させることができた。つまり,ネットワーク上のあるマシンにインストールしたソフトウエアを,ほかのマシンから実行できるということだ。

 当初,Paint Pro Shopは,引退させた開発用パソコンから実行していた。Paint Shop Proでブラウズ機能を使っていると,Paint Shop Proは「ブラウズ・ファイル」と呼ばれるファイルをユーザーが参照したフォルダに作成する。そしてRegmonのトレース結果によれば,Paint Shop Proはブラウズ・ファイルにそれ専用のアイコンを設定していたのだ。このアイコンは,引退させたコンピュータ上にあるPaint Shop Proの実行ファイルに紐付いたままになっていたので,エクスプローラはブラウズ・ファイルを見つける度に,ブラウズ・ファイルのアイコンをロードしようとしていた。エクスプローラは今でも主としてシングル・スレッドで動作している。よって,OSのネットワーク・ドライバが既にネットワーク上に存在しないコンピュータからの応答に待機している間,エクスプローラのUIはハングしてしまう。

 いろいろと調べた結果,エクスプローラのUIにはアイコンの関連付けを簡単に管理する方法が用意されていないことが分かった。エクスプローラの[フォルダ オプション]ダイアログ・ボックスの[ファイルの種類]タブで,Paint SHop Pro関連のすべてのファイル・タイプを探し出す方法もあったが,筆者は手動でPaint Shop Proのレジストリキーを削除して,いま使っているマシンでファイルをブラウズした。

 Process Explorer,Filemon,そしてRegmonを使うことによって,筆者はこの問題をおよそ15分で診断し,解決することができた(この3つのプログラムはすべてリンク先からダウンロードできる)。このトラブルシューティングの例で気がかりなことは,一般のユーザーが同じような状況に陥っても,ハングの原因を特定したり,それを解決する方法が全くないことだ。ここに示したのは,Windowsユーザーが「使ってる間にシステムが遅くなった」と不満を持つ原因となり,「よく分からないから,とにかく再インストールしよう」と考えるに至る,様々なWindowsのトラブルのほんの一例である。Windows Vistaではこの点が改善されているとよいのだが。