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

Mat*_*ley 8 java windows jvm

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

我设法找到的就是HKCU\Software\JavaSoft\Java Runtime Environment\<ver>.假设安装它是否安全%PROGRAMFILES%\Java\jre<ver>

我试图在C#中这样做,但我认为答案是语言无关的,所以任何答案都值得赞赏.

编辑:好的傻我,我找到了如何检测是否在使用c#的计算机上安装了java运行库,这指向了HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion哪个有效HKLM\Software\JavaSoft\Java Runtime Environment\<ver>\JavaHome.我设法找到了这些而不是在下面HKLM\Software\Wow6432Node\JavaSoft\Java Runtime Environment.有没有办法检测我应该检查哪些不试图嗅探CPU类型?

Mat*_*ley 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.
}
Run Code Online (Sandbox Code Playgroud)