Я загрузил 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
-
Откройте jre-8u11-windows-i586-iftw.exe
(или более новый исполняемый файл), используя Hxd
-
Поиск и замена (в шестнадцатеричном режиме) двух вхождений
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
-
Сохраните файл, переименованный в jre-8u11-windows-i586-iftw__Patched.exe
-
Запустите исправленную программу, если вы ее исправили правильно, она будет жаловаться на то, что ваша ОС слишком старая.
-
Отключите всплывающее окно и установите Java 8. Он будет загружать новейшую версию Java из Oracle каждый раз при ее запуске.
-
Нажмите на свой рабочий стол [Start], щелкните правой кнопкой мыши "Мой компьютер" и щелкните левой кнопкой мыши по "Свойствам".
-
Нажмите вкладку "Дополнительно", а затем кнопку "Переменные среды". Вам не нужно ничего с буквами "java" в вашем PATH
(копия java установлена в C:\WINDOWS\system32
, которая находится в вашем PATH
). Очистите все нежелательные файлы из PATH
, включая ссылки на java (но, очевидно, не удаляйте каталог C:\WINDOWS\system32
из вашей переменной PATH).
Задайте переменную среды с именем JAVA_HOME (при необходимости создайте ее) в
JAVA_HOME=C:\Program Files\Java\jre8
-
Теперь все должно быть правильно установлено. Возможно, вам придется перезагрузиться, но прежде чем вы это сделаете, отметьте шаг 11.
-
Если 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).
Это "исправление - как только оно должно работать какое-то время".