code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Java VMの削除

古いバージョンのJava VMを調査するため、インストールされているJava VMの完全削除を行った。

環境はWindows 7 Ultimate 64bit。アンインストールするJava VMはJava SE 6 Update 30 (JDKおよびJRE)、あとはMS Javaのアンインストールについても少し触れている。環境依存の情報もあるかもしれないのでご注意下さい。

コントロールパネルからアンインストールを行ったのだが、問題が発生した。JDKは削除できたのだが、インストール情報(プログラムと機能→プログラムのアンインストール)からJREが消えない。何度繰り返しても消えない。

インストール情報からJREが消えない

www.java.comで次のページが見つかった。

JRE をアンインストールした後に、「アプリケーションの追加と削除」リストから JRE を削除する方法

レジストリは面倒だなぁ、ということでこのページに書いてあるWindows Installer CleanUp ユーティリティを試そうとするが、このユーティリティの配布は終了していた。

もう少し調べてみるとMSのサポートページ(Windows ベースのコンピューターでプログラムをインストールおよびアンインストールするときの問題のトラブルシューティング)にたどり着いた。最近よく見かけるFix itだ。

ファイル名もMicrosoftFixit.ProgramInstallUninstall.Run.exeといかにもCleanUpしてくれそうな名前であった。

結局このツールを使って、インストール情報からJREが削除できた。ただ、アンインストールがうまくいかなかった原因は不明。もう一度インストールしてアンインストールしたら、今度はうまくいったので再現不可となった。

完全に削除する

さて、これだけではJava VMは完全に削除できない。System32(とSysWOW64)を覗いてみるとJava関連のDLLが残っている。また、ActiveX系のゴミも残っている状態である。

javaの完全削除について - Microsoft Answersにヒントがあった。

上記QAサイトに記載のあるInternet Explorerのアドオンとかスタートアップは、おそらくアンインストーラーが片付けているはずだが、残っていたら削除(Java(tm) Plug-In 2 SSV Helperは後で削除する)。

System32およびSysWOW64から次のファイルを削除する。

また本記事では言及しないがFirefoxやChromeなどにインストールされたプラグインは完全に削除できていない可能性があるので各ブラウザのプラグインページ(about:pluginsなど)で確認し削除する(非IE系はdllを削除すれば良い)。

最後にCCleanerを起動し、レジストリ→ActiveXおよびクラスの問題点の問題点解決を行う。これでdeployJava1.dll, jp2ssv.dllに関連したレジストリのゴミが削除される。

SSV (Secure Static Versioning)

jp2ssv.dllとはアンインストール後にIEのアドオンの管理で利用不可として残っていたJava(tm) Plug-In 2 SSV Helperという名のIE用アドオンである。

Secure Static Versioningを行うヘルパーアドインということだが、実際使ったことないのでいまいち実体が掴めていない。Deployment Toolkitに比べてドキュメントも少なめ。

いくつかのサイトの話を総合すると、SSVが導入(Java 5.0 update 6以降)されたバージョン以降のJVMをインストールしていると1.4とか1.3向けに作られたアプレットも(レジストリとかを勝手に書き換えて)5.0で動作するようにしてしまう。回避するにはOBJECTタグを使うとか。もう今となってはどうでもいい仕様な感じなので、こちらも基本無効にしてある。

Deployment Toolkit + SSVだと特定のバージョンのランタイムでアプレットが実行できるのか。SSV Helperを無効にしてもSSV自体は無効にはならないんじゃないの?とか。署名付きアプレットはどうか(リリースノートは署名付きJava Web Startは影響受けないと書いてあるため)。は謎のまま。いつか確認する。

日本語でSSVについて触れているサイト

英語でSSVについて触れているサイト

主にssv.dllについて触れているがjp2ssv.dllでも通じるんじゃないかと思う。

Next-Generation Java Plug-in

jp2(New Java Plug-in, Java Plug-in 2, Next Generation Java Plug-in, 次世代Java Plug-in等の名称)については、Java 6.0 Update 10のリリースノート (英語), 次世代 Java™ Plug-In テクノロジのリリースノート (日本語)やそこから参照しているNext-Generation Java™ Plug-In Technology Introduced in Java SE 6 update 10 (英語), 次世代の Java Plug-in とは何ですか ? (日本語)が参考になる。

一行で書くと、新しく書き直してパワーアップ、スピードアップしたけど互換性も保ってるよ、ってことらしい。

さらに

環境によってはインターネットオプションのセキュリティ内にあるレベルのカスタマイズに『Java VM』あるいは『Microsoft VM』が残っている場合がある。

* Windows7の場合、最初から存在しない。手元には2台のWin7(64bit)マシンがあって、片方は『Microsoft VM』が存在していた。『Microsoft VM』が表示されている方はなぜかWindows 7なのにSysWOW64フォルダにmsjava.dllがあった、何かを入れたときに一緒に入ったのだろうが、ちょっと気持ち悪い。
* ここの記事によるとvmhelper.dllもセットなようだが、このファイルは存在しない。
* 『Microsoft VM』部分のレジストリ(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\SO\JAVAPER)を参照すると、"PlugUIText"="@vmhelper.dll,-4007"というようにリソース(vmhelper.dll)内の文字列を参照しているので必要なdllだと思うのだが。
* このあたりの調査は、XN Resource Editor (PE Resource Explorer)(リソースエディタ)およびDependency Walker(モジュール解析ツール)を使用。
* ふとレジストリの@(アットマーク; at sign)の意味を調べてみたのだが、はっきりとした答えは得られなかったが、おそらくリソースファイル(dllとか)の文字列テーブル(String table)を参照することを意味していると思う。ただ、このあたりはWindows APIを使って読み書きしているだろうから、あまり知らなくてもいい情報かも。あとは.regファイル時のデフォルトキーという意味にもなる。

と話がそれたが、インターネットオプションのセキュリティにある『Microsoft VM』あるいは『Java VM』を消す(非表示にする)には、レジストリが次のようになるよう、値を削除すればよい。

消してしまった後に元に戻したい場合は、バックアップがあればバックアップから戻せばいいが、そうでない場合は『Microsoft 仮想マシンのオプションが Windows 2000 から表示されません。』を参照して戻せばよい。ただ、これってMS Java(Microsoft仮想マシン)でSun(Oracle)のJavaじゃないよね、たぶん。きっと消したまんまの方が安全でしょう。

さらにMS Java

勢いよくさらに続けてmsjavaの再インストール、および削除の方法。

下記サイトに詳しく書いてあるが(元々はMS Javaのインストールを解説したページも含む)、RunDll32 advpack.dll,LaunchINFSection java.inf,UnInstallをコマンドプロンプトから実行して再起動すればよい。

さらにさらにMS Java

MS Javaの最新ビルド番号については『[INFO] 現在ダウンロード可能な Microsoft VM のビル』にある通り3810。過去のビルドがJDKの何に相当するのかは、『[INFO] Microsoft VM が含まれているこれまでのリリースの一覧 (なぜか英語のページはない)』にある。

アンインストールができたかどうかは、Is Microsoft virtual machine Installed?にInternet Explorerでアクセスしてみて 『Microsoft virtual machine is not installed.』とか 『Microsoft virtual machine Version 5,0,5000,0 is installed.』 であれば、MS JavaはIEから見える範囲にはいないことになる。 『Microsoft virtual machine Version 5,0,3810,0 is installed.』のように5000以外の数字が出ていると、IEから何かMS Javaの残骸が見えてしまっている。

* (5,0,5000,0は、MS Javaのない環境に、Sun(Oracle)提供のVMをインストールするとregutils.dllというdllを08B0E5C0-4FCB-11CF-AAA5-00401C608500(MS JavaのClass ID(CLSID))として登録しており、その結果MS Javaがインストールされていると表示される模様。ちなみにhttp://java.com/js/deployJava.jsでもこのバージョン文字列を判定に使用している。

ちなみにMS JavaをWindows7上のXP Modeにインストールしてみたところ、Sunのアプレットデモは動作したので、こちらも合わせて確認するといいかも(Sun(Oracle)のJava VMが入っているとそっちで動作しちゃうので判断できないけど)。

MS Javaのインストール後、Is Microsoft virtual machine Installed?ではバージョン番号が取得できるのに、Sunのアプレットデモが動作しない、あるいは自分で書いたコードが動作しない場合は、レジストリにゴミが残っている可能性がある。

次のようなケースに遭遇した(Windows 7上のXP Mode): JREをアンインストール後にMS Javaを入れたがアプレットが動作しない。

まずはsystem32ディレクトリでregsvr32 msjava.dllを実行。

次にレジストリから次のキーを削除。で、アプレットがMS Javaで動作した。

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{08B0E5C0-4FCB-11CF-AAA5-00401C608501}\TreatAs

キーの中身は{CAFEEFAC-0013-0001-0020-ABCDEFFEDCBB}となっていた。CAFEで始まるのでどうせJavaだろうと思っていたら、やはりJavaだった。JavaRaでも削除してくれないようだ。

{08B0E5C0-4FCB-11CF-AAA5-00401C608501}はWeb Browser Applet ControlというActive Xコントロールのコード。SunのJREをインストールするとSunのJREを参照するようにポインタを仕掛ける模様。で、アンインストールしても元に戻してくれない、、、と。

* なんかJREを完全に削除するのは不可能な気がしてきた・・・。

さらに削除したかを確認するために

Java Plug-inのバージョン確認サイトのリンク達。

関連記事
タグ:Java Microsoft
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。