在 Windows XP 上安装 JDK8 - advapi32.dll 错误
Posted
技术标签:
【中文标题】在 Windows XP 上安装 JDK8 - advapi32.dll 错误【英文标题】:installing JDK8 on Windows XP - advapi32.dll error 【发布时间】:2014-01-24 18:39:44 【问题描述】:我下载了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 位。
【问题讨论】:
我认为 Java 8 不支持 XP。 @assylias 是这样吗?有没有文件说明? 几个月前我尝试在 XP 计算机上安装它,但我记得收到了警告(虽然安装完成了......)。 @assylias 我在 google 中查找并发现 msdn.microsoft.com/en-us/library/ms724847%28VS.85%29.aspx 其中 RegDeleteKeyExA 的最低客户端要求是 Windows Vista、Windows XP Professional x64 Edition 所以这可能是问题所在。 @yashhy 在这种情况下达成交易有两个因素。 1)Java 8 将在几个月后发布,2)微软将在 3 个月后结束对 XP 的支持。没有时间,也没有意义。 【参考方案1】:Oracle 已宣布修复 Windows XP 安装错误
Oracle 已决定修复 Windows XP 安装。从 2014 年 10 月 15 日发布的 JRE 8u25 开始,安装程序的代码已更改,以便再次可以在 Windows XP 上进行安装。
但是,这并不意味着 Oracle 将继续支持 Windows XP。他们不保证 JRE8 的当前和未来版本与 Windows XP 兼容。看起来这是您自担风险的事情。
见Oracle blog post here.
您可以直接从 Oracle 下载站点获取 latest JRE8。
【讨论】:
【参考方案2】:发生这种情况是因为 Oracle 放弃了对 Windows XP 的支持(顺便说一下,安装程序在其 ADVAPI32.DLL
中没有使用 RegDeleteKeyExA
),如 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
),也将其解压缩,
使用 JDK8 中的 unpack200
将所有 .pack 文件解压缩为 .jar 文件(旧的解压缩将无法正常工作); JAVA_HOME
环境变量应设置为您的 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%
,一切顺利。
注意:您可能不应该仅仅为了在 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 是将上面指定的一些路径从 \bin\
更改为 \lib\
(安装程序目录树中的文件位置有点不同) - 但我 强烈建议不要这样做。
另请参阅:How can I get the latest JRE / JDK as a zip file rather than EXE or MSI installer?、JRE 1.7 - java version - returns: java/lang/NoClassDefFoundError: java/lang/Object
【讨论】:
我搞砸了 upack200 cmd 行并将所有文件重命名为 .pack.jar ,使用FOR /R %%f IN (*.pack) DO "C:\Program Files\Java\jre8\bin\unpack200.exe" -r -v "%%f" "%%~pf%%~nf.jar"
现在再试一次。
一切正常,谢谢。我还下载了 jre 并做了同样的事情并替换了我的 jre8 程序目录。您可能只使用 sdk 中的 jre 目录。有一些旧版本号的注册表项,但这可能没什么大不了的。 java -version 返回正确的构建。
奇怪,因为我无法从 jdk 中找到 src.zip,所以 eclipse 无法附加源代码。
实际上,据我所知,核心 Java 的早期访问 JDK 中没有任何 src.zip(仅适用于 Java FX) - 至少我在我的中找不到任何 src.zip。 .. 您仍然可以从 (AFAIR) OpenJDK 或 Oracle 的下载中单独获取源包(它曾在某处)
对于所有对 unpack200 有问题的人,我想澄清一下,它是 jdk 的bin
文件夹中的一个可执行文件。如果您尝试使用 jdk6 或 7 中包含的版本来解压 jd8 包文件,则会出现错误。如果您没有指向新 jdk8 的 JAVA_HOME 变量,则可能会发生这种情况。您必须使用您正在安装的新 jdk 中包含的unpack200
版本。【参考方案3】:
对于那些不怕使用十六进制编辑器(例如 XVI32)的人来说,还有一个替代解决方案 [感谢 Trevor ]:在 unpacked 1 安装程序可执行文件(在 JDK 的情况下为 jdk-8uXX-windows-i586.exe
)只需将所有出现的 RegDeleteKeyExA
(在“新”ADVAPI32.DLL
中找到的 API 名称)替换为 RegDeleteKeyA
(旧 API 名称),后跟两个十六进制“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 - 您需要先解压缩它们,否则您将无法找到所需的十六进制字符串
【讨论】:
我必须承认,尽管我有疑问,但我尝试了这个而不是接受的答案,只是因为它更容易做到,所以为什么不试试呢? - 完全有效。谢谢! 嗨!这很容易。它也对我有用。在 XVI32 中找到 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。该文件中仅出现两次要替换。跨度> 喜欢这个解决方案。【参考方案4】:在 XP 上使用 JRE 8 还有另一种方法 - 使用 MSI 部署包。
在支持操作系统的 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
【讨论】:
因为它实际上需要将 JRE 安装在另一个符合规范的系统上(更不用说它需要从中复制文件),我认为这种方法是一种(可以这么说)概念验证 - 而不是一个可行的、可用的解决方案。 @vaxquis,我相信可以使用 7z 或类似的工具直接从 setup.exe 中提取 jre1.8.0.msi 文件 @SebastianGodelet 首先,没有 setup.exe,只有 jdk-8uXX-windows-i586.exe,其次,它只包含 tools.zip,而后者又不包含 jre1。 8.0.msi 和 data1.cab;如果可以通过简单的 setup.exe 提取进行安装,您为什么认为我会发明整个解决方案?而不是“确定”尝试自己做来确定是否可能;如果您设法按照自己的方式进行操作,请将其作为解决方案发布在这里。 顺便说一句,我什至没有检查这种方法(jre1.8.0.msi 复制),但我必须假设相关文件是由安装程序本身构建的,因为我无法以任何方式在 tools.zip 中找到它们。 首先,WTF 是一个冒犯性的短语,请不要在 *** 上使用粗俗和/或淫秽的措辞/首字母缩略词。其次,发布无效的解决方案没有有帮助;套用尤达 - “不要尝试有帮助;要么有帮助,要么不要尝试”。第三件事,“setup.exe”不是任何东西的同义词 - 要么准确并指定有问题的文件名,要么说,例如,“setup exe”、“setup executable”等。以上是关于在 Windows XP 上安装 JDK8 - advapi32.dll 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows XP 上安装 Windows Server 2003 管理工具包
如何在 Windows XP 上安装 Windows Server 2003 管理工具包