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

时间:2011-01-25 09:24:58

标签: java windows jvm

我正在尝试检测是否安装了JVM以及它所在的位置,以便我可以运行java.exe

我设法找到的只有HKCU\Software\JavaSoft\Java Runtime Environment\<ver>。假设它安装在%PROGRAMFILES%\Java\jre<ver>

中是否安全

我正在尝试在C#中执行此操作,但我认为答案与语言无关,因此我们非常感谢您的回答。

编辑:好的傻我,我发现How to detect whether java runtime is installed or not on a computer using c#指向HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersionHKLM\Software\JavaSoft\Java Runtime Environment\<ver>\JavaHome合作的HKLM\Software\Wow6432Node\JavaSoft\Java Runtime Environment。我设法在{{1}}下面找到了这些。有没有办法检测我应该检查哪一个而不试图嗅探CPU类型?

4 个答案:

答案 0 :(得分:4)

我将把我的帽子扔进戒指中,但最后使用的代码是:

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.
}

答案 1 :(得分:3)

Windows系统上正确安装的JVM(很可能......)会响应命令shell命令:

java -version

这不会返回路径,但请尝试

java -verbose -version

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

您可以尝试获取“* 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 ----