我需要从用户当前已在其计算机上安装的应用程序中获取Java版本。但是,我安装的应用程序安装了自包含的JRE,当我执行System.getProperty("java.version")
时,它仅返回该自包含的JRE的版本。无论如何,我可以获得机器上安装的版本吗?
答案 0 :(得分:2)
JRE安装仅在Windows中的注册表项中列出,而Linux没有中央注册表。
HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java运行时环境
您可以编写一个简单的程序进行测试:
public class ShowVersion {
public static void main(String args[]) {
System.out.println(System.getProperty("java.version"));
}
}
或者您可以尝试命令提示符
键入java -version
有关更多信息,您可以参考 SO的姊妹站点:
https://superuser.com/questions/1221096/how-do-i-check-what-version-of-java-i-have-installed
答案 1 :(得分:1)
如果您捆绑了JRE(是否检查了它的发行许可证?请确保您被允许这样做),并且它在该版本下运行,则可以重新获得该版本。
如果用户要在另一个JRE下运行它,则将获得该JRE的版本。事情就是这样。
实际上,如果您使用的是自包含的JRE,则用户甚至根本不需要在系统上安装另一个JRE,这就是将一个捆绑在一起的全部目的。
除了对文件系统进行全面扫描之外,无法知道还可能安装哪些其他JVM,如果这样做,则必须考虑Java运行时可执行文件可能具有的所有不同名称,具体取决于文件系统。重新运行。在找到所有这些可执行文件之后,除非您对可执行文件进行二进制分析或以某种方式从安装了这些可执行文件的目录中的其他文件中检测信息,否则您仍然无法真正知道它们属于哪个Java版本。可能存在或可能不存在,这取决于所讨论的系统,其设置方式,使用的JVM以及是否已手动更改了安装。
例如,在JDK安装的根目录中,有一个名为“发行版”的文件,其中包含JVM版本,但AFAIK不需要该文件,JVM才能正常工作。而且您的应用程序可能没有文件系统读取该文件的权限。
答案 2 :(得分:0)
您可以尝试查找已知路径,例如C:\Program Files\Java
,但除非您扫描整个文件系统中的java
或java.exe
,否则您将永远不确定。
这可能无法正常运行,因为运行应用程序的用户不应访问系统目录。您可以强制以管理员级别的访问权限启动应用程序,但这会带来安全风险。
如果您已经将JRE与您的应用程序捆绑在一起,那么您的要求似乎毫无意义。
答案 3 :(得分:0)
您可以使用java(java -version)运行cmd命令,并使用该输出获取版本。
List<String> cmdArgs = new ArrayList<>();
cmdArgs.add("cmd.exe");
cmdArgs.add("/C");
cmdArgs.add("java -version");
ProcessBuilder processBuilderObj = new ProcessBuilder();
processBuilderObj.command(cmdArgs);
Process process = processBuilderObj.start();
//get inputStream
BufferedReader data = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line1;
while ((line = data.readLine()) != null){
System.out.println(line);
}
答案 4 :(得分:0)
System.getProperty("java.version")
返回运行您的应用程序的Java的版本时,从Java应用程序作为系统命令调用“ java -version
”将返回默认(已安装)Java的版本。您的系统。
以下是通过编程找到它的一般步骤:
java -version
”。当然,这与平台无关。答案 5 :(得分:0)