なげやりろぐ

フテイキコウシン

 VistaでIE8β2のアレを仕込む

このあいだ一般向けにもリリースされて誰でも試せるようになったIE8β2ですが、ネット上の評判を見ているとどうやらいまいちなところがあるとかどうとか。
ただ、素のIE7環境(含IE6)におけるSleipnirでは特定のページにおいてjavaScriptの動作でもたつくとか固まったみたいになるということが多々あり、IE8β導入後にはこれらの問題が解消されたというリポートが各所で上がっています。
それならばIE8β(2)を導入せずに、javaScript用のエンジン部分だけを差し替えてしまえばいいじゃんということを実践された方が現れて、実際に効果があったということを報告されています。


ならばワタシも・・・って言う感じで早速IE8β2*1のものに差し替えてみたところ、確かに今まで表示に問題のあったページでもサクサクと動作するようになってくれました。

この差し替えに必要なjscript.dllというのはIE8β2のインストーラから抽出してやらなければいけないことに加え、実際の作業ではセーフモードで行わないとダメということもあったりで誰もが気軽に試せるというモノでは無いのがネックだったりしますけど、Vistaの場合においてはセーフモードでなくてもjscript.dllの差し替えは可能ですのでそのあたりを含めた差し替え手順を記しておこうかなと。

まずはIE8β2のjscript.dllを手に入れる

ココのページからWindowsのバージョン・言語にあわせたファイルを落とせますが、Vista用のファイルからはjscript.dllを抽出するのは困難ですのでXP用のファイルを落として来ます。*2
落として来たIE8-WindowsXP-x86-JPN.exeを適当なアプリ*3を用いて任意の場所へと展開します。展開先をExplorerで開き、検索欄にjscript.dllと入力。見つかったファイルをデスクトップあたりへ複製しておき、IE8-WindowsXP-x86-JPN.exeおよび展開したファイルはサクッと削除。

jscript.dll入れ替え前の下準備

jscript.dllはWindowsのシステムファイルとして登録されちゃっていますので、通常のコピペではファイルの書き替えが出来ないなどの制限があります。

XPの場合、システムファイル保護機能により通常ではExplorer上で変更出来たように見えても再起動後にはdllcacheフォルダ*4の中にあるモノに書き戻されてしまいますのでセーフモードでの作業が必須なワケですが、コノあたりの詳細は検索すればHitしますので今回は割愛♪


で、Vistaの場合はというとXPの時とは違ってWRPという方式でシステムファイルの保護が行われるようになりましたので、解除方法さえわかればセーフモードにしなくてもシステムファイルのフルコントロールが出来るようになります。ただし、コレは間違ってしまうとOS自体を壊しかねない危険な行為ですので試される方は自己責任においてくれぐれも慎重に。

で、WRPをくぐり抜けるにはどうするかということなワケですが。


Vistaの場合は例え管理者であっても容易にファイルの変更が行えないというXPと比べると弄りにくい仕様に変更されています。というのもVistaにはAdministratorのヒトツ上のレベルにTrustInstallerという神様権限を持つ中の人が君臨していまして、この人の許可なしでは手を出せないファイルがいっぱいあるということなんです。
もっとも簡単なのは以前のエントリーでも触れましたけど、TrustInstallerを神の座から引きずり下ろして自分(現在ログオンしているユーザー)がその場に居座っちゃうという手段。ただしコレはセキュリティ的に大きなリスクを背負い込みますのでワタシみたいにしょっちゅうOSの再インスコする方以外にはオススメ出来ません、ていうかしないでください(笑)


そこで、今回はjscript.dllに関してだけこのアクセス権乗っ取り作業を行うということになります。
※以下の作業において、不幸にもOSに不具合が発生してしまった時は(OSのインスコ先がCドライブの場合)コマンドプロンプトから”C:\Windows\system32>sfc /scannow”を実行することで以前のシステムへ復旧可能なハズ・・・です。

  • ファイルの所有者を変更する
    • まず、Windows\system32フォルダをExplorerで開き検索窓にjscript.dllと入力して該当ファイルを表示。
    • 見つかったjscript.dllを右クリしてプロパティから『セキュリティ』タブを選択
    • 詳細設定ボタンを押し、『所有者タブ』を選択。現在の所有者がTrustInstallerになっているはず。
    • 《編集》ボタンを押し、さらに《他のユーザーまたはグループ》ボタンを押して選択ダイアログのオブジェクト名入力欄に現在のログオンユーザ名を入力
    • 《名前の確認》ボタンを押すと間違いがなければ現在ログオンしているPCの名前とユーザー名に置き換えられるので《OK》を押す
    • 確認メッセージに従って『所有者』タブを開き直すと所有者が変更したユーザに置き換わっているはず
  • アクセス権を神様レベルに昇格
    • 『有効なアクセス許可』タブを選択し、つづけて《選択》ボタンを押して先ほどと同様、オブジェクト名入力欄に現在のログオンユーザ名を入力
    • この時点ではフルコントロールにはなっていないことを確認
    • つぎに『アクセス許可』タブを選択後《編集》ボタンを押してさらに《追加》ボタンを押す
    • 再びオブジェクト名入力欄に現在のログオンユーザ名を入力するとjscript.dllのアクセス許可エントリというダイアログが現れるので、フルコントロールの許可にチェックを入れると自動的に下のチェックボックスもONになるので《OK》を押す
    • 『アクセス許可』タブにて現在のユーザーがフルコントロール権限を持ったことを確認する

とまぁ、ココまでで下準備は完了です。

IE7jscript.dllをIE8β2のモノへと

上書き、あるいは削除後に追加でも良いのですが、ココでは念のためIE7jscript.dllをレジストリエントリからも削除しておいてから新たにIE8β2のjscript.dllを登録し直して使うことにします。
jscript.dllはSleipnirgeckoプラグインなどでお馴染みのActiveXとしてシステムに登録して利用するようになっていますので、適用後にはアプリケーションレベルのレジストリ参照となるようです。つまりOSの再起動なしでも以下の作業後には新しいjscript.dllの動作を確認出来るということになります。*5

regsvr32 /u %SystemRoot%\system32\jscript.dll
  • 削除された旨のダイアログを確認
  • Windows\system32フォルダにあるjscript.dllをExplorerもしくはコマンドプロンプトで削除
  • デスクトップにコピーしておいたIE8β2のjscript.dllをWindows\system32フォルダへ移動
  • 出来ればやっておきたいのがjscript.dll移動後の所有者およびアクセス権の変更、コレはしなくても動作には支障ありませんが・・・*6
  • 新しいjscript.dllをレジストリに登録し直し
regsvr32 %SystemRoot%\system32\jscript.dll
  • 登録完了のダイアログを確認


以上で入れ替え作業は完了です。

あとはSleipnerを立ち上げ直して今まで重かったページへと突撃してみましょう(笑)

*1:実はβ1の段階でも差し替えを試していましたが、β2のjscript.dllの方がさらに良くなっているようです。

*2:利用するjscript.dll自体は同じモノのようなので何ら問題なし。

*3:LhaPlusとかUniExtractとかWinRAR、WinZip...etc

*4:隠し属性のあるフォルダなので通常では見えません。確認のためにはフォルダオプションにて変更が必要。

*5:IEコンポーネントブラウザは再起動が必要!

*6:新しいjscript.dllの所有者・アクセス権はファイルを展開したときのレベルになっているはずです。