ハングしたゲーム ランチャーの問題

翻訳元: The Case of the Hung Game Launcher (英語)

Sysinternals ツールによって正常にトラブルシューティングできた事例の知らせを受けるのは、非常にうれしいことです。しかし、このツールを使用して自分の問題を解決することほど充足感を得られるものはありません。特にこの事例は愉快なものでした。この事例を解決することで、楽しみながら作業をするという以前の状態を取り戻すことができたのですから。

時間があると、私はときどき PC ゲームをしてストレス (steam) を発散します (後でおわかりになると思いますが、ここでは steam という言葉をかけています)。ここ数年のお気に入りは、Portal というパズル ゲームです。1 作目の Portal がとてもおもしろかったので、私は予約受け付けが始まると、Valve の Steam ネットワークで Portal 2 を予約し、発売から数時間後にはそのゲームをプレイしていました。それ以来、私はコミュニティで開発されたマップ/パズルをプレイしています。先週の土曜日、私は、コミュニティのマップ/パズル コンテストで優勝した、特におもしろいマップ/パズルをプレイしてみました。しかし、時間が足りず、一度ではクリアできませんでした。翌朝、再び PC の前に座り、Portal 2 のデスクトップ アイコンをダブルクリックして、いつもの Steam の起動ダイアログ ボックスを開きました。通常、このゲームは数秒で起動しますが、このときはダイアログ ボックスがいつまでも表示されたままでした。

図: Steam の起動ダイアログ ボックス

私は Steam を強制終了してアイコンを再度ダブルクリックしましたが、ダイアログ ボックスは、またハングしました。Process Monitor でトレースをキャプチャし、Process Explorer で Steam のスレッドのスタックを確認しましたが、手掛かりは見つかりませんでした。Portal 2 の構成かインストールが破損しているのかもしれないと思い、Portal 2 を削除して再ダウンロードして再インストールしましたが、問題は解決できませんでした。Portal 2 をリセットしたことで、原因として残ったのは Steam と一般的な Windows の問題でした。そこで、次に取った手順は Steam の再インストールでした。

まず、コントロール パネルで [プログラムのアンインストールまたは変更] ページを開いて、Steam の項目をダブルクリックすると、アンインストールの確認とアンインストールするとローカル コンテンツがすべて削除されるという警告メッセージが表示されました。私は、ゲームの設定が消えたり、すべてのゲームを再インストールしなければならなくなるという危険は冒したくなかったので、アンインストールはやめることにしました。ほとんどの Windows インストーラー サービス (MSI) ベースのインストーラーには、ユーザーのデータや構成を削除することなくアプリケーションを再インストールする修復オプションが用意されているので、Steam のホーム ページにアクセスし、Steam のインストーラーをダウンロードして実行しました。すると予想どおり、インストール ウィザードで修復オプションが表示されました。

図: Steam インストール ウィザードの修復オプション

ところが、[Next] をクリックすると、ローカル ファイルからデータを読み込むときにネットワーク エラーが発生したという明らかに不自然なエラー メッセージが表示されました。

図: エラー メッセージ

私は Process Monitor を起動し、エラーになったアプリケーションの修復処理のトレースをキャプチャしました。エラー メッセージでは SteamInstall[1].msi というファイルが言及されていたため、ログ ファイルで SteamInstall[1].msi という文字列を検索しました。最初にヒットしたのは、HKCR\Installer\Products の下にある PackageName というレジストリ値のクエリで読み取ったデータ値でした。

図: Process Monitor で SteamInstall[1].msi を検索

次にヒットしたのは、そのいくつか後の処理ですが、エラー ダイアログに表示されたファイルの場所からインストーラーがファイルを読み取ろうとする処理でした。

図: 処理内容の確認

インストーラーが既存のレジストリ キーからファイル名を読み取っていたことと、そのファイルの場所が Internet Explorer (IE) のダウンロード キャッシュ内にあったことから、インストーラーでは、最初にインストールしたときに使用したファイルのコピーを起動しようとしていたようです。もともと私は、(つい先ほど行ったように) 直接 Valve の Web サイトから IE 経由でインストーラーを起動したため、Steam は IE のダウンロード キャッシュにダウンロードされました。しかし、このファイルは、古くなって削除されたようです。

Process Monitor によって、インストーラーは、最初にファイルをダウンロードした場所をレジストリから読み取っていたことが明らかになりました。つまり、レジストリでインストーラーを新しくダウンロードした場所を指定すると、今は存在しない以前のファイルを探すのではなく、新しいインストーラーを起動させることができます。私は、ログで Steaminstall.msi を検索して新しくインストーラーをダウンロードした場所を調べて、パス (別のダウンロード キャッシュの場所) を確認しました。

図: ダウンロード キャッシュのパスを確認

その後、レジストリのクエリ項目に戻り、右クリックして [Jump To] をクリックしました。すると、Process Monitor によって Regedit が起動し、LastUsedSource と PackageName の値を更新して新しくダウンロードした場所を反映させたレジストリ キーが表示されました。

図: 表示されたレジストリ キー

次に、開いたままにしていたインストーラーのエラー ダイアログを閉じ、ウィザードの [Next] をクリックして再度修復を試みました。今度は、Steam の再インストールが行われ、ウィザードではインストールが正常に完了したことを示すメッセージが表示されました。

図: インストール完了

祈りながら Portal 2 を起動すると、Steam の "Preparing to Launch" という表示は 1 秒で消え、Portal 2 のスプラッシュ画面が表示されました。こうして、問題は解決されました。Steam とすべてのゲームをアンインストールして再インストールしても同じ結果になったでしょう。しかし、Process Monitor によって、かなりの時間を節約できましたし、保存してあるゲームの状態や構成についても失わずに済みました。わずか数分で問題を解決して、私は別のパズルの解読に戻ることができました。

70 以上あるすべての Sysinternals ツールを使用して、Windows システムをトラブルシューティングおよび管理するヒントについては、私と Aaron Margosis が執筆した『Windows Sysinternals Administrator’s Reference』を参照してください。この書籍を 2011 年 8 月 15 日までに購入し、レシートを私 (markruss@microsoft.com) に電子メールで送信すると、10 名の方に抽選でサイン入りの『Zero Day』があたります。

ページのトップへ

共有

ブログにコピー: ([Ctrl] + [C] でコピーしてください)