web-dev-qa-db-ja.com

WindowsでのJDK8のインストールXP-advapi32.dllエラー

JDK8 build b121をダウンロードしましたが、インストールしようとすると次のエラーが表示されます。

the procedure entry point RegDeleteKeyExA could not be located in the dynamic link library ADVAPI32.dll

オペレーティングシステムは、Windows XPバージョン2002 Service Pack 3、32ビットです。

59
yashhy

これは、 http:で説明されているように、OracleがWindows XP(ADVAPI32.DLLにインストーラーによってRegDeleteKeyExAが使用されていない)のサポートを削除したために発生します。 //mail.openjdk.Java.net/pipermail/openjfx-dev/2013-July/009005.html 。 XPの公式サポートは終了しましたが、Javaバイナリは(少なくともJava 8u20 EA b05現在)XP互換です-インストーラーのみではない...

そのため、ソリューションは実際には非常に簡単です。

  1. 7-Zip(または他の適切なアンパッカー)を入手し、配布.exeを手動でアンパックし、その中に1つの.Zipファイル(tools.Zip)があり、それも抽出します。

  2. jDK8のunpack200を使用して、すべての.packファイルを.jarファイルにアンパックします(古いアンパックは正しく機能しません)。 Java_HOME環境変数は、Javaアンパックルートに設定する必要があります。 「C:\ Program Files\Java\jdk8」-たとえば、暗黙的に指定できます。

    SET Java_HOME=C:\Program Files\Java\jdk8
    
    • 1つのコマンド(バッチファイル)ですべてのファイルを解凍します。

      FOR /R %%f IN (*.pack) DO "%Java_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar"
      
    • 1つのコマンド(JREルートからのコマンドライン)ですべてのファイルを解凍します。

      FOR /R %f IN (*.pack) DO "bin\unpack200.exe" -r -v "%f" "%~pf%~nf.jar"
      
    • ファイルを手動で見つけて、1つずつ解凍して解凍します。

      %Java_HOME%\bin\unpack200 -r packname.pack packname.jar
      

    ここで、packnameは、たとえばrtです。

  3. 使用したいツール(たとえば、Netbeans)を%Java_HOME%にポイントすれば、準備完了です。

注:WebブラウザでJava 8を使用するためだけに、または同様の理由(JRE 8のインストールが頭に浮かぶ)でこれを行うべきではないでしょう。メジャーJavaバージョンリリースの初期アップデートのセキュリティ上の欠陥は(気になります)legendaryであり、それに加えてどちらもXPに対する実際のサポートはありません_またはJavaのXP 8は、事態をさらに悪化させます。言うまでもなく、通常はdo n'tブラウザーにJavaが必要です(たとえば http:// nakedsecurity。 sophos.com/2013/01/15/disable-Java-browsers-homeland-security/ -トピックはすでに多くのページでカバーされています。詳細情報が必要な場合は、Googleで検索してください)。いずれにせよ、この手順をJREに適用するために必要なことは、上記で指定したパスの一部を\bin\から\lib\に変更することだけです(インストーラーのディレクトリツリーでのファイルの配置は少し異なります)-まだ私は強くそれをしないことを勧めます.

参照: EXEまたはMSIインストーラーではなく、最新のJRE/JDKをZipファイルとして取得するにはどうすればよいですか?JRE 1.7-Java version-Returns:Java/lang/NoClassDefFoundError:Java/lang/Object

76
vaxquis

16進エディタ(XVI32など)の使用を恐れない人のための代替ソリューションもあります[これにTrevorに感謝します]:inunpacked 1 インストーラー実行可能ファイル(JDKの場合はjdk-8uXX-windows-i586.exe)は、RegDeleteKeyExA(「新しい」ADVAPI32.DLLで見つかったAPIの名前)のすべての出現をRegDeleteKeyA(レガシーAPI名)に置き換えるだけです。 、その後に2つの16進数 '00'が続きます(パディング/セグメンテーション境界を保持するため)。インストーラーは、サポートされていないWindowsバージョンについて文句を言いますが、それでも動作します。

参考までに、生の16進文字列は次のようになります。

52 65 67 44 65 6C 65 74 65 4B 65 79 45 78 41

交換された

52 65 67 44 65 6C 65 74 65 4B 65 79 41 00 00

注:この手順は、オフライン(スタンドアロン)パッケージとオンライン(ダウンローダー)パッケージの両方に適用されます。

1:一部の新しいインストーラーのバージョンは UPX でパックされています-最初にそれらをアンパックする必要があります。そうしないと、必要な16進文字列を見つけることができません。

21
vaxquis

OracleはWindows XPインストールエラーの修正を発表しました

Oracleは、Windows XPインストールを修正することを決定しました。 2014年10月15日のJRE 8u25リリースの時点で、インストーラーのコードが変更され、Windows XPへのインストールが再び可能になりました。

ただし、これは、OracleがWindows XPを引き続きサポートしているという意味ではありません。 JRE8の現在および将来のリリースがWindows XPと互換性があることを保証するものではありません。それはあなた自身のリスクのようなもので実行されているように見えます。

Oracleブログの投稿はこちら を参照してください

Oracleダウンロードサイトから latest JRE8 を入手できます。

17
kevingreen

XP上のJRE 8では、MSIを使用してパッケージを展開する別の方法があります。

  • サポートされているOSを搭載したPCにJRE 8 x86をインストールする
  • C:\ Users [USER]\AppData\LocalLow\Sun\Java\jre1.8.0\jre1.8.0.msiおよびData1.cabをXP PCにコピーして、jre1.8.0.msiを実行します

または(サイレント方式、バッチファイルなどで使用可能)

for %%I in ("*.msi") do if exist "%%I" msiexec.exe /i %%I /qn EULA=0 SKIPLICENSE=1 PROG=0 ENDDIALOG=0
6
user3467974