Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Windows上检测JVM的存在和位置?_Java_Windows_Jvm - Fatal编程技术网

Java 如何在Windows上检测JVM的存在和位置?

Java 如何在Windows上检测JVM的存在和位置?,java,windows,jvm,Java,Windows,Jvm,我试图检测是否安装了JVM以及它的位置,以便运行java.exe 我只找到了HKCU\Software\JavaSoft\Java运行时环境\。假设它安装在%PROGRAMFILES%\Java\jre中是否安全 我正试图用C#来做这件事,但我认为答案与语言无关,所以任何答案都值得赞赏 编辑:好的,我找到了指向HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion,它与HKLM\Software\JavaSoft\Java R

我试图检测是否安装了JVM以及它的位置,以便运行
java.exe

我只找到了
HKCU\Software\JavaSoft\Java运行时环境\
。假设它安装在
%PROGRAMFILES%\Java\jre
中是否安全

我正试图用C#来做这件事,但我认为答案与语言无关,所以任何答案都值得赞赏


编辑:好的,我找到了指向
HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion
,它与
HKLM\Software\JavaSoft\Java Runtime Environment\\JavaHome
一起工作。我设法在
HKLM\Software\Wow6432Node\JavaSoft\Java运行时环境下找到了这些。是否有某种方法可以在不尝试嗅探CPU类型的情况下检测我应该检查哪种类型?

windows系统上正确安装的JVM将(很可能…)响应命令shell命令:

java -version
这不会返回路径,但请重试

java -verbose -version
(至少)其中一行将包含子字符串
rt.jar
,此行包含“活动”java虚拟机的路径。

您可以尝试获取“*java_HOME*”环境变量

这可能会有帮助

编辑:

最好看一看“CLASSPATH”变量

------- start --------
C:\Documents and Settings\david>set
ALLUSERSPROFILE=...
APPDATA=...
CLASSPATH=.;C:\Archivos de programa\Java\jre6\lib\ext\QTJava.zip
CommonProgramFiles=...
...
----- end ----

我将用我最终使用的代码向拳击场致敬:

string javaDirectory = null;

// Native registry key - 32b on 32b or 64b on 64b
// Fall back on 32b Java on Win64 if available
RegistryKey javaKey =
    Registry.LocalMachine.OpenSubKey("SOFTWARE\\Javasoft\\Java Runtime Environment") ??
    Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Javasoft\\Java Runtime Environment");

if (javaKey != null)
{
    string javaVersion = javaKey.GetValue("CurrentVersion").ToString();
    try
    {
        javaDirectory = javaKey.OpenSubKey(javaVersion).GetValue("JavaHome").ToString();
    } catch(NullReferenceException)
    { /* Ignore null deref, means we can't get a directory */ }
}

if (javaDirectory == null)
{
    // deal with a lack of Java here.
}

JRE不是在c:\windows中安装java.exe吗?

或者应该设置JAR的注册表项。有一个WinAPI函数来获取文件关联,但我忘记了。至少在我的开发pc上,这不是真的<代码>java
未在
路径
中注册。总的来说,我认为在Windows上依赖
PATH
是个坏主意,因为太多的应用程序都不需要它。@Christian文件关联也不可靠。一些档案管理员覆盖了jar关联。@Matthew Scharley-我同意,但这仍然是一个可能的进一步检查。@Andreas说,你在技术上是正确的,我在互联网上看到过很多关于这个问题的答案。但从个人经验来看,我需要调整
路径
,以便为许多本应正确设置的应用程序设置路径。不幸的是,在我的开发PC上也没有正确设置。不过,绝对值得一试。您能为我的利益提供一个示例输出吗?我正在查看一台新安装Java JRE的PC的环境变量。我还没有找到varialbe“JAVA_HOME”(我的错误,对不起),但是如果一个所谓的“CLASSPATH”可能会有所帮助。但是注册表项是否包含所有版本的JAVA?因为有些应用程序捆绑了较旧版本的JRE,可能会覆盖您以前的注册表项,这是一个真正的难题。@biziclop它包含所有版本,并与上面描述的指向默认JRETH的CurrentVersion键并排显示。很高兴知道,谢谢。不过,我的话仍然有效,不要盲目相信当前版本。:)也不要相信这把钥匙。。。刚刚调查过,我的密钥指向过时的客户机jvm.dll,它已被删除,而不是现在用于客户机的较新服务器jvm.dll。它不在我的电脑上,也不在路径中的任何位置。(win7 64)这只是提示我在我的
C:\
上进行搜索,在
C:\Windows\SysWOW64
中找到了它。必须与
HKLM\Software\Wow6432Node
类似。IMO,看起来微软严重破坏了x86的兼容性…@MatthewScharley啊,谢谢,让我们看看我是否能最终让eclipse运行。