使用C#在任何情况下检索Java安装目录

时间:2013-05-24 20:57:16

标签: c# java windows

所以我正在为我的应用程序创建Java Access Bridge的安装程序,并且需要找到Java安装目录。我正在使用这段有用的代码..

public static string GetJavaInstallationPath()
    {
        try
        {
            string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
            if (!string.IsNullOrEmpty(environmentPath))
            {
                return environmentPath;
            }

            string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
            using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
            {
                string currentVersion = rk.GetValue("CurrentVersion").ToString();
                using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
                {
                    return key.GetValue("JavaHome").ToString();
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.StackTrace);
            return null;
        }
    }

直到..我在我的虚拟机上安装了干净的Windows 7 64位安装并从java.com安装了Java。它默认安装了32位版本的Java,但我真的认为这无关紧要,因为32位也需要或JAVA_HOME变量或注册表项。嗯,事实并非如此!没有注册表项,PATH变量中没有条目,也没有JAVA_HOME变量。所以这段代码不起作用!我的问题是,即使它是安装的32位Java版本,我如何检测java安装目录。我不知道我能用什么......

1 个答案:

答案 0 :(得分:4)

您忘记了32位应用程序的注册表路径不同。请参阅此MS文章:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx