如何确定32位Java的位置

如何确定32位Java的位置,java,windows,batch-file,32-bit,Java,Windows,Batch File,32 Bit,有些时候,JRE安装在特定于版本的目录[1]中 因此,我尝试编写一个DOS批处理或VBS脚本来确定最新安装的JRE 8 32位的位置 但是在检查注册表项时 “HKEY\U本地\U机器\SOFTWARE\JavaSoft” 我注意到,它只包含有关64位Java运行时的信息 那么,您知道如何通过DOS或vbs确定最新安装的32位Java运行时的位置吗?这也应该考虑在系统上并行安装一个64位版本。 另一种方法可能是在目录C:\Program Files(x86)\Java中进行文件搜索。但是Java运

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

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

但是在检查注册表项时 “HKEY\U本地\U机器\SOFTWARE\JavaSoft” 我注意到,它只包含有关64位Java运行时的信息

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

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

[1]

JRE安装目录 从JDK8U20版本开始,JRE将安装在特定于版本的目录中。例如: C:\ProgramFiles\Java\jre1.8.0\u 20

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

编辑:是正确的。看我对他的回答的补充


上一个答案:从“开始”菜单快捷方式中删除位置如何?快捷方式应始终位于“所有用户开始”菜单中→ 程序,除非用户手动删除它,在近二十年的桌面支持中,我不能说我从未见过这种情况发生。即使安装了多个版本,快捷方式也应始终指向Java的默认实例。并且安装程序没有选项供最终用户放弃创建“开始”菜单快捷方式

无论如何,可以读取目标的快捷方式

如下文所述,“开始”菜单快捷方式可以指向64位Java安装。如果是这种情况,则返回到搜索
%PROGRAMFILES(x86)%
以查找
java.exe

@echo关闭
setlocal
设置“lnk=%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Java\About Java.lnk”
如果已定义程序文件(x86)(设置“PF=%PROGRAMFILES(x86)%”),否则设置“PF=%PROGRAMFILES%”
对于/f“tokens=1*delims==”%%I in(
'wmic path win32\U快捷方式文件,其中“名称='%lnk:\=\\%'”获取目标/格式:列表2^>NUL^\124;查找“=”'
)设置“$JAVA=%%~dpJ”
如果未定义$JAVA goto notfound
2> &1“%$JAVA%\JAVA.exe”-版本|查找/i”64位“>NUL&&(
(
对于/f“delims=“%%I in('dir/s/b/o:n”%PF%\*java.exe“2^>NUL'),请设置“$java=%%~dpI”
) || (
转到未找到
)
)
echo最新32位Java驻留在%$Java%中
后藤:EOF
:未找到
echo请安装32位Java。
后藤:EOF

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

因此,以下批处理文件应能解决上述问题:

:
@回音
::在64位系统上执行?
如果定义了程序文件(x86)(设置“REGEDITLOC=%windir%\SysWOW64\”),则设置“REGEDITLOC=”
::定义本地参数
设置“TEMP\u FILE\u JAVA\u REGISTRY\u CONTENT=%~dp0java\u runtime\u environment.reg”
::将java运行时密钥从注册表导出到临时文件
开始/W%REGEDITLOC%REGEDIT/E“%TEMP\u FILE\u JAVA\u REGISTRY\u CONTENT%”“HKEY\u LOCAL\u MACHINE\SOFTWARE\JavaSoft\JAVA运行时环境”
::确定java的安装目录
对于/F“tokens=1*delims==”%%A IN('TYPE”%TEMP\u FILE\u JAVA\u REGISTRY\u CONTENT%“^ FIND”JavaHome“),请设置JAVA\u RUNTIME\u HOME=%%B
::删除不需要的字符
设置JAVA\u运行时\u主页=%JAVA\u运行时\u主页:=%
设置JAVA\u运行时\u主页=%JAVA\u运行时\u主页:\\=\%
@回显%JAVA\u运行时\u主页%
::删除临时文件
@删除“%TEMP\u FILE\u JAVA\u REGISTRY\u CONTENT%”/S/Q>NUL 2>&1
@呼应
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

rojo的贡献:

上面的脚本说明了正确的想法,但导出.reg文件并将其删除可能会有点麻烦。以下是相同的想法,但使用
%windir%\syswow64\reg.exe query
在线查询注册表值:

@ECHO关闭
setlocal
如果定义了程序文件(x86)(设置为“reg=%windir%\SysWOW64\reg”),则设置为“reg=reg”
设置“branch=HKLM\Software\JavaSoft\Java运行时环境”
对于(“%reg%query”%branch%“/v“CurrentVersion”^查找“reg\u SZ”)中的/f“tokens=3”%%v,请执行以下操作(
对于(“%reg%query”%branch%\%%v)/v“JavaHome”^查找“regu SZ”)中的/f“tokens=2*”%%I,请执行以下操作(
设置“$JAVA=%%J”
)
)
java.exe的回显位置:%$java%\bin

我想你可以通过打开
控制面板>Java
检查当前的jre,然后点击
Java
选项卡,在那里你应该可以看到当前jre的位置,在我的例子中是
C:\Program Files\Java\jre1.8.0\u 31\bin\javaw.exe
我如何通过DOS批处理或vbs脚本执行这一步骤?为什么你不能只需使用控制面板?有趣的方法。但这并不能解决查找最新32位版本位置的问题。如果默认实例为64位,您将无法通过快捷方式找到32位版本。我尝试了其他一些黑客攻击,但没有取得多大成功。我考虑检查自动更新程序,这只是历史上的事32位版本执行自动更新。但最新的64位Java 8版本不再如此。我尝试编写
InternetExplorer.Application
COM对象的脚本,并使用浏览器检测来确定最新的32位版本,但浏览器安全性不允许我在scrip中的IE实例中运行脚本我想我的解决方案已经接近你所能得到的了,尽管我在猜测