在Windows XP上安装JDK8 – advapi32.dll错误
我下载了JDK8 build b121,并尝试安装时出现以下错误:
过程入口点RegDeleteKeyExA不能位于dynamic链接库ADVAPI32.dll中
操作系统是Windows XP,版本2002 Service Pack 3,32位。
发生这种情况是因为Oracle放弃了对Windows XP的支持(顺便说一句,安装程序没有在ADVAPI32.DLL
使用RegDeleteKeyExA
),如http://mail.openjdk.java.net/pipermail/openjfx-dev/ 2013年7月/ 009005.html 。 然而,虽然官方对XP的支持已经结束,但Java二进制文件仍然(至less在Java 8u20 EA b05中)与XP兼容 – 只有安装程序不是…
正因为如此,解决scheme其实很简单:
-
得到7-zip(或任何其他质量的存档),手动解压分发.exe,它有一个.zip文件(
tools.zip
),解压缩, -
使用
unpack200
的unpack200将所有的.pack文件解压缩为.jar文件(旧的解包将无法正常工作);JAVA_HOME
环境variables应该设置为你的Java解压根,例如“C:\ Program Files \ Java \ jdk8” – 你可以通过例如SET JAVA_HOME=C:\Program Files\Java\jdk8
-
使用单个命令解压缩所有文件(在batch file中):
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%
,你就可以走了。
注意:您可能不应该这样做,只是在您的Web浏览器中使用Java 8或出于任何类似的原因(安装JRE 8时想到); 主要的Java版本早期更新的安全漏洞(介意我)是传说中的 ,并且在XP上没有对XP和Java 8的实际支持只会使事情变得更糟。 更不用说你通常不需要在你的浏览器中使用Java(参见http://nakedsecurity.sophos.com/2013/01/15/disable-java-browsers-homeland-security/); – 这个话题已经在许多页面,只是Google它,如果你需要进一步的信息)。 在任何情况下,AFAIK将这个过程应用到JRE所需的唯一东西是将上面指定的一些path从\ bin \更改为\ lib \(安装程序目录树中的文件放置有些不同) – 但我强烈build议反对这样做。
另请参阅: 如何将最新的JRE / JDK作为zip文件而不是EXE或MSI安装程序获取? , JRE 1.7返回:java / lang / NoClassDefFoundError:java / lang / Object
对于那些不害怕使用hex编辑器(例如XVI32)的用户来说,也有一个替代的解决scheme[感谢Trevor for this]:在解压缩后的 1个安装程序可执行文件( jdk-8uXX-windows-i586.exe
)只需用RegDeleteKeyA
(传统API名称)replace所有出现的RegDeleteKeyExA
(在“new” ADVAPI32.DLL
find的API的名称),然后用两个hex00(用于保留填充/分段边界)。 安装程序会抱怨不支持的Windows版本,但仍然工作。
作为参考,原始的hexstring将是:
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打包在一起 – 你需要先解压它们,否则你根本无法find所需的hexstring
甲骨文已经宣布修复Windows XP安装错误
自从Oracle决定修复Windows XP安装以来,我添加了这个答案。 从2014年10月15日发布的JRE 8u25发布以来,该错误已被修复,从而阻止了Windows XP的安装。
但是,这并不意味着Oracle正在继续支持Windows XP。 他们不保证当前和未来版本的JRE8与Windows XP兼容。 看起来这是一个风险自负的运行。
请看这里的Oracle博客文章。
您可以从Oracle下载站点获得JRE 8u25 (或最新版本)。
使用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
或(无声的方式,可用于batch file等)
for %%I in ("*.msi") do if exist "%%I" msiexec.exe /i %%I /qn EULA=0 SKIPLICENSE=1 PROG=0 ENDDIALOG=0
在Win XP上安装Java 8的“未来保障”方法
- 获得一个hex编辑器。 名为Hxd的程序将为此工作。
- 下载名为
jre-8u11-windows-i586-iftw.exe
的Oracle Java 8在线安装程序(它是两个Windows可执行文件中最小的一个,运行它会每次下载最新的Java版本)。
Java的最新版本可以从这个页面中获得,没有直接的联系。
Java SE运行时环境8下载
http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
-
使用
jre-8u11-windows-i586-iftw.exe
打开jre-8u11-windows-i586-iftw.exe
(或更新的可执行文件) -
search并replace(以hex模式)
RegDeleteKeyExA
的两次出现,并用RegDeleteKeyA
(旧的API名称)replace它们。 请记住使用hex模式:
更换
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
-
运行补丁程序,如果你正确的补丁,它会抱怨你的操作系统太旧了。
-
closuresPopup并安装Java 8.在线安装程序将在每次运行Oracle时从Oracle下载最新版本的Java。
-
点击桌面上的[开始]button,右键单击“我的电脑”,然后左键单击“属性”。
-
点击“高级”选项卡,然后点击“环境variables”button。 你不需要
PATH
的字母“java”(java的副本安装在PATH
中的C:\WINDOWS\system32
中)。 清理PATH
所有垃圾,包括对java的引用(但显然,不要从PATHvariables中删除C:\WINDOWS\system32
目录)。
将名为JAVA_HOME的环境variables(如有必要,创build它)设置为
JAVA_HOME=C:\Program Files\Java\jre8
-
现在一切都应该正确安装。 您可能需要重新启动,但在执行之前请检查步骤11。
-
如果Java不启动(使用“java -version”进行testing),请查找* .pack文件,如下所示:
cd“c:\ Program Files \ java \”
dir / s * .pack
您可以通过以下两种方法之一来解压缩它们:
- 使用单个命令解压缩所有文件(在batch file中):
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时,只需重新运行修补程序,它将从Oracle获取最新的Java直接副本并进行安装。 无需重新打补丁或设置任何环境variables(直到您过去版本8,或希望使用JDK而不是JRE)。
这是一个“修复 – 一旦它应该工作一段时间”解决scheme。