Установка JDK8 на Windows XP - ошибка advapi32.dll

Я загрузил JDK8 build b121 и, пытаясь установить, я получаю следующую ошибку:

точка входа процедуры RegDeleteKeyExA не может быть расположена в библиотеке динамической ссылки ADVAPI32.dll

Операционная система - Windows XP, версия 2002 с пакетом обновления 3 (SP3), 32-разрядная.

Ответ 1

Это происходит из-за того, что Oracle потеряла поддержку Windows XP (кстати, у нее нет RegDeleteKeyExA, используемой установщиком в ADVAPI32.DLL), как описано в http://mail.openjdk.java.net/pipermail/openjfx-dev/2013-July/009005.html. Тем не менее, пока официальная поддержка XP закончилась, двоичные файлы Java по-прежнему (как и Java 8u20 EA b05, по крайней мере) совместимы с XP - только установщик не...

Из-за этого решение на самом деле довольно просто:

  • получить 7-zip (или любой другой архиватор качества), распаковать дистрибутив .exe вручную, у него есть один ZIP файл внутри него (tools.zip), извлечь его тоже,

  • используйте unpack200 из JDK8 для распаковки всех файлов .pack в .jar файлы (старые распаковки не будут работать должным образом); JAVA_HOME переменная окружения должна быть установлена ​​в ваш root-пакет для распаковки Java, например. "C:\Program Files\Java\jdk8" - вы можете указать его неявно, например,

    SET JAVA_HOME=C:\Program Files\Java\jdk8
    
    • Распакуйте все файлы с помощью одной команды (в пакетном файле):

      FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar"
      
    • Распакуйте все файлы с помощью одной команды (команда из корня JRE):

      FOR /R %f IN (*.pack) DO "bin\unpack200.exe" -r -v "%f" "%~pf%~nf.jar"
      
    • Распакуйте вручную, разместив файлы и распакуя их один за другим:

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

    где packname - это, например, rt

  • укажите инструмент, который вы хотите использовать (например, Netbeans), на %JAVA_HOME%, и вам хорошо идти.

Примечание. Вероятно, вы не должны этого делать, просто используя Java 8 в своем веб-браузере или по любой другой причине (установка JRE 8 приходит на ум); недостатки безопасности в ранних версиях основных выпусков Java-версий (mind me) легендарны и, добавив, что никакой реальной поддержки ни XP, ни Java 8 на XP не только значительно ухудшают ситуацию. Не говоря уже о том, что вы обычно не нуждаетесь в Java в своем браузере (см. например http://nakedsecurity.sophos.com/2013/01/15/disable-java-browsers-homeland-security/ - тема уже охвачены на многих страницах, просто Google, если вам нужна дополнительная информация). В любом случае, AFAIK, единственное, что требуется для применения этой процедуры к JRE, - это изменить некоторые из указанных выше путей из\bin\to\lib\(расположение файлов в дереве каталогов установщика немного отличается) - все же я strong советуем не делать этого.

Смотрите также: Как я могу получить последнюю версию JRE/JDK в виде zip файла, а не установщика EXE или MSI?, JRE 1.7 возвращает: java/lang/NoClassDefFoundError: java/lang/Object

Ответ 2

Существует также альтернативное решение для тех, кто не боится использовать шестнадцатеричные редакторы (например, XVI32) [спасибо Trevor за это]: в распакованном исполняемом файле установщика 1 (jdk-8uXX-windows-i586.exe в JDK) просто заменит все вхождения RegDeleteKeyExA (имя API, найденное в "новом" ADVAPI32.DLL), с RegDeleteKeyA (устаревшее имя API), за которым следуют два hex '00 (чтобы сохранить границы заполнения/сегментации), Установщик будет жаловаться на неподдерживаемую версию Windows, но все равно будет работать.

Для справки необработанные шестнадцатеричные строки будут:

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 - вам сначала нужно распаковать их, иначе вы просто не сможет найти требуемую шестнадцатеричную строку

Ответ 3

Oracle анонсировала исправление для ошибки установки Windows XP


Я добавляю этот ответ, так как Oracle решила исправить установку Windows XP. Что касается выпуска JRE 8u25 в 10/15/2014, исправлена ​​ошибка, которая предотвратила установку Windows XP.

Однако это не означает, что Oracle продолжает поддерживать Windows XP. Они не гарантируют, что текущие и будущие версии JRE8 совместимы с Windows XP. Похоже, что это бег на свой страх и риск.

Смотрите здесь блог Oracle.

Вы можете получить JRE 8u25 (или последний) сразу же с сайта загрузки Oracle.

Ответ 4

С JRE 8 на XP есть другой способ - использовать MSI для развертывания пакета.

  • Установите JRE 8 x86 на ПК с поддерживаемой ОС.
  • Копировать c:\Users [USER]\AppData\LocalLow\Sun\Java\jre1.8.0\jre1.8.0.msi и Data1.cab на ПК XP и запустить 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

Ответ 5

"Будущее-доказательство" Метод установки Java 8 на Win XP

  • Получить шестнадцатеричный редактор. Программа под названием Hxd будет работать для этого.
  • Загрузите онлайн-инсталлятор Oracle Java 8 под названием jre-8u11-windows-i586-iftw.exe (это самый маленький из двух исполняемых файлов Windows. Запуск он загружает последнюю версию Java каждый раз).

Самая последняя версия Java может быть получена с этой страницы, прямой ссылки нет.

Java SE Runtime Environment 8 Загрузки

http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

  1. Откройте jre-8u11-windows-i586-iftw.exe (или более новый исполняемый файл), используя Hxd

  2. Поиск и замена (в шестнадцатеричном режиме) двух вхождений RegDeleteKeyExA и замените их на RegDeleteKeyA (устаревшее имя API). Не забудьте использовать шестнадцатеричный режим:

Заменить

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. Сохраните файл, переименованный в jre-8u11-windows-i586-iftw__Patched.exe

  2. Запустите исправленную программу, если вы ее исправили правильно, она будет жаловаться на то, что ваша ОС слишком старая.

  3. Отключите всплывающее окно и установите Java 8. Он будет загружать новейшую версию Java из Oracle каждый раз при ее запуске.

  4. Нажмите на свой рабочий стол [Start], щелкните правой кнопкой мыши "Мой компьютер" и щелкните левой кнопкой мыши по "Свойствам".

  5. Нажмите вкладку "Дополнительно", а затем кнопку "Переменные среды". Вам не нужно ничего с буквами "java" в вашем PATH (копия java установлена ​​в C:\WINDOWS\system32, которая находится в вашем PATH). Очистите все нежелательные файлы из PATH, включая ссылки на java (но, очевидно, не удаляйте каталог C:\WINDOWS\system32 из вашей переменной PATH).

Задайте переменную среды с именем JAVA_HOME (при необходимости создайте ее) в

JAVA_HOME=C:\Program Files\Java\jre8
  1. Теперь все должно быть правильно установлено. Возможно, вам придется перезагрузиться, но прежде чем вы это сделаете, отметьте шаг 11.

  2. Если Java не запускается (проверьте с помощью java -version), найдите файл *.pack, например:

cd "c:\Program Files\java \"

dir/s *.pack

Вы можете распаковать их одним из этих двух способов:

  • Распакуйте все файлы с помощью одной команды (в пакетном файле):

FOR /R %%f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar"

  • Распакуйте все файлы с помощью одной команды (в командной строке из корня JRE):

FOR /R %f IN (*.pack) DO "%JAVA_HOME%\bin\unpack200.exe" -r -v "%f" "%~pf%~nf.jar"

В будущем, когда вы захотите обновить Java, просто запустите свою исправленную программу, и она выберет самую новую копию Java прямо из Oracle и установит ее. Нет необходимости повторно устанавливать или устанавливать любые переменные среды (до тех пор, пока вы не закончите версию 8 или не захотите использовать JDK вместо JRE).

Это "исправление - как только оно должно работать какое-то время".