Google App Engine のインストールでエラーコード2908

昨日Google App Engine SDKを1.7.4にアップデートしようとしたところ、インストール中にエラーコード2908がでてインストールできなくなりました。
試行錯誤の結果なんとかインストールを済ませることができたので書きたいと思います。

まず私の環境は以下です。

1ヶ月ほど前にOSをクリーンインストールしたばかりです。

Google App Engine SDKのインストール時にエラー2908が出ること自体は珍しいわけではないようでググるといくつか情報があります。
ただしSDKのバージョンが1.3の頃など比較的古い情報が多く、私と同じ1.7.4での情報はありませんでした。
とりあえず見つけた情報に従って対策を試してみます。
まずはこちらid:ryobenさんが紹介されているレジストリの値を削除する方法。
レジストリエディタを使用して

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Installer/UserData/

の下でデータがC?\WINDOWS\system32\rgb9rast_2.dllになっているキーを削除するというものです。
手順についてはリンク先で詳しく説明されていますのでここでは省きます。

結果的には私の場合はこれでは解決出来ませんでした。キーを削除してインストールを再実行してみても全く同じ箇所でエラー2908でした。

次の方法を試します。
こちらで紹介されているインストールをとりあえず強制終了してRepairするというもの。

この方法を試そうとしたのですが私のケースではそもそもシステムが「インストールされた」ということを認識する前にエラーが発生しているので強制終了して再起動後インストーラを起動しても"Repair"の項目が表示されません。(また新規インストールが始まる)

そのまま再び新規インストールを続けてみても全く同じ所で2908です。
これは困った・・・他に有効な対策は見当たらない・・・と頭を抱えていたら突然デスクトップに例のGAEのショートカットアイコンが現れました。
どうも強制終了したあともインストールが裏で継続されていたようです。
正確に言うとタスクマネージャからユーザー名がアカウント名になっているmsiexec.exeプロセスを停止しても、ユーザー名がSYSTEMになっているmsiexec.exeは実行されたままになっておりこれが終了するとインストールが完了するようです。
この状態で再度インストーラを起動すると"Repair"の項目が表示されます。ちなみに"Repair"を選んでも何もせず終了するので正常にインストールできているのだと思います。

というわけでもしエラー2908が発生したらSYSTEM名で実行されているプロセスを終了せず「待つ」のがポイントのようです。
手順を整理すると

  1. インストールを開始してエラー2908が発生する
  2. タスクマネージャを開きユーザー名がアカウント名になっているmsiexec.exeプロセスを終了する。エラーコードを示すウィンドウが表示されている状態ではプロセスは2つあります。このときユーザー名がSYSTEMになっているmsiexec.exeはそのままにする
  3. 4,5分待つ
  4. インストール完了
  5. Repairする

これで私の場合はインストール出来ました。

ところでこのエラーが発生する根本的な原因なのですが、おそらくWindowsインストーラ.NET Frameworkのいずれかのバージョンの相性が悪いことが原因だと思います。というのも上にも書きましたが私は1ヶ月ほど前にOSをクリーンインストールしたばかりでインストールしたアプリといえばChromeFirefoxOperaのブラウザ3種とAptana Studio 3、ノートンiTunes、Office、PythonRubyintel SSD tool boxのみなので原因が絞られます。
これらのアプリのうちintel SSD tool box 以外はクリーンインストール以前にも使用していましたが問題は発生していなかったのでこれが原因と思われます。
Visual Studio 2008に付随する.NET Frameworkが原因ではないかという情報があるのですがintel SSD tool boxもインストールする際に.NET Frameworkを要求するので最新ではないバージョンを手動でいれたのです。
これがまずかったとしか思えないのですよね。
クリーンインストール以前も.NET Frameworkは入っていたのですべてのバージョンが悪いわけではないと思います。現在インストールしているのは1.1、2.0、3.0、3.5なのでこの内のいずれかだと思います。
もし次また同じ症状が発生したら.NET Frameworkを削除して試そうかと思います。