以编程方式检查是否安装了 Java 开发工具包

Programmatically check whether the Java Development Kit is installed

作为安装程序的一部分,我正在构建,我想检查是否已经安装了 Java 开发工具包(具体来说 JDK,JRE 不会)。在我的本地机器上,我可以清楚地看到注册表中的密钥(HKLM\SOFTWARE\JavaSoft\Java 开发工具包),但以下代码(C#)找不到该密钥:

RegistryKey jdkKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\JavaSoft\Java Development Kit");

当我使用以下代码调查 "HKLM\SOFTWARE\JavaSoft" 下存在哪些键时,Java 开发工具包不存在。

string[] keyNames = Registry.LocalMachine.OpenSubKey("SOFTWARE\JavaSoft").GetSubKeyNames();

我也以编程方式查看了我的环境变量,似乎也没有任何东西指向 JDK 存在(它在那里,正如我上面所说,它在注册表中,并且我将它用于 Java 开发我正在为其构建安装程序的程序,很有趣)。

关于如何确定 JDK 是否已安装的任何想法?正如我所说,仅 JRE 是不够的,因为我在运行时进行一些编译,为此我需要 JDK.

试试这个

System.out.println(System.getProperty("java.library.path"));

如果为空则不应安装

如果您正在寻找 Java Development 工具包,您可以尝试检查 JAVA_HOME 环境变量,它通常指向到 JDK.

的安装根目录
string javaHome = Environment.GetEnvironmentVariable("JAVA_HOME");
if (javaHome == null)
    Console.WriteLine("JDK seems not to be present");   

看来我找错了(注册表)树。我没有意识到注册表根依赖于我的应用程序的配置平台。因为我的应用程序的目标平台设置为 x86,所以所有搜索都从我的注册表的 Wow6432Node 开始。将我的目标平台更改为 "Any CPU" 修复了此问题,并且我可以编程方式访问注册表中以图形方式显示在注册表中的所有树。

可能值得注意的是,我使用 Visual C# 2010 Express 来执行此操作,因此必须通过直接编辑“.csproj”文件的 XML 来更改我的目标平台,因为有没有 UI 个选项可以做到这一点。