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

提问

因此,我正在为我的应用程序创建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安装目录.我一无所知.

最佳答案

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

    公众号
    关注公众号订阅更多技术干货!