gpt4 book ai didi

java - 如何确定 32BIT Java 的位置

转载 作者:可可西里 更新时间:2023-11-01 11:28:09 26 4
gpt4 key购买 nike

有些时候 JRE 安装在特定版本的目录 [1] 中。

所以我尝试编写一个 DOS 批处理或 VBS 脚本来确定最新安装的 JRE 8 32 位的位置。

但是在检查注册表项时“HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft”我注意到这仅包含有关 64 位 Java 运行时的信息。

那么知道如何通过 DOS 或 vbs 确定最新安装的 32 位 Java 运行时的位置吗?这还应该考虑到可能会在系统上并行安装 64 位版本。

另一种方法是在目录 C:\Program Files (x86)\Java 中搜索文件。但 Java Runtime 可能未安装在此目录中。

[1] http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html

JRE 安装目录从 JDK 8u20 版本开始,JRE 将安装在特定版本的目录中。例如:C:\Program Files\Java\jre1.8.0_20

特定于版本的目录命名是有意的,并不表示 JRE 安装是静态的。与早期版本一样,静态 JRE 安装仅在用户传递 STATIC=1 选项(通过命令行或配置文件)时执行。

最佳答案

据我所知,64 位 Java 运行时安装不会覆盖 32 位版本的注册表项。如果您使用 32 位版本的 regedit.exe,您将找到属于 32 位 Java 运行时环境安装的注册表项。

所以下面的批处理文件应该可以解决上面的问题:

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
:: Execution on a 64 BIT system?
if defined PROGRAMFILES(x86) (set "REGEDITLOC=%windir%\SysWOW64\") else set "REGEDITLOC="

:: Define local parameters
set "TEMP_FILE_JAVA_REGISTRY_CONTENT=%~dp0java_runtime_environment.reg"

:: Export java Runtime Keys from registry to a temporary file
START /W %REGEDITLOC%REGEDIT /E "%TEMP_FILE_JAVA_REGISTRY_CONTENT%" "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment"

:: Determine the install directory of java
FOR /F "tokens=1* delims==" %%A IN ('TYPE "%TEMP_FILE_JAVA_REGISTRY_CONTENT%" ^| FIND "JavaHome"') DO SET JAVA_RUNTIME_HOME=%%B

:: Remove not required chars
SET JAVA_RUNTIME_HOME=%JAVA_RUNTIME_HOME:"=%
SET JAVA_RUNTIME_HOME=%JAVA_RUNTIME_HOME:\\=\%
@echo %JAVA_RUNTIME_HOME%

:: Delete temp file
@del "%TEMP_FILE_JAVA_REGISTRY_CONTENT%" /S /Q > NUL 2>&1
@ECHO ON
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

来自 rojo 的贡献:

上面的脚本说明了正确的想法,但是导出 .reg 文件并抓取它可能有点麻烦。这是相同的想法,但使用 %windir%\syswow64\reg.exe 查询 在线查询注册表值:

@ECHO OFF
setlocal

if defined PROGRAMFILES(x86) (set "reg=%windir%\SysWOW64\reg") else set "reg=reg"
set "branch=HKLM\Software\JavaSoft\Java Runtime Environment"

for /f "tokens=3" %%v in ('%reg% query "%branch%" /v "CurrentVersion" ^| find "REG_SZ"') do (
for /f "tokens=2*" %%I in ('%reg% query "%branch%\%%v" /v "JavaHome" ^| find "REG_SZ"') do (
set "$JAVA=%%J"
)
)

echo Location of java.exe: %$JAVA%\bin

关于java - 如何确定 32BIT Java 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com