以编程方式检查是否已安装Java Development Kit

时间:2015-02-26 09:00:34

标签: java c# .net registry

作为安装程序的一部分,我正在构建,我想检查是否已经安装了Java Development Kit(特别是JDK,JRE不会这样做)。在我的本地计算机上,我可以清楚地看到注册表中的密钥(HKLM \ SOFTWARE \ JavaSoft \ Java Development Kit),但是下面的代码(C#)找不到所说的密钥:

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

当我使用以下代码调查" HKLM \ SOFTWARE \ JavaSoft"下的哪些密钥时,Java Development Kit不在那里。

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

我也以编程方式查看了我的环境变量,似乎没有任何东西指向JDK存在(它就在那里,如上所述,它在注册表中,并且我正在使用它来为我开发安装程序的Java开发,有趣的是。

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

4 个答案:

答案 0 :(得分:1)

试试这个

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

如果不应该安装空

答案 1 :(得分:1)

您可以通过获取整个系统环境变量System.getenv();找到JDK,找到jdk存在或执行Windows命令"where javac"和Linux "whereis javac"。对于示例代码get environment variablesCommand executor by java

答案 2 :(得分:0)

如果要在计算机上查找Java 开发工具包,可以尝试检查JAVA_HOME环境变量,该变量通常指向JDK的安装根目录。 / p>

string javaHome = Environment.GetEnvironmentVariable("JAVA_HOME");
if (javaHome == null)
    Console.WriteLine("JDK seems not to be present");   

答案 3 :(得分:0)

看来我正在咆哮错误的(注册表)树。我没有意识到注册表根依赖于我的应用程序的配置平台。因为我的应用程序的目标平台设置为x86,所有搜索都从我的注册表的Wow6432Node开始。将我的目标平台更改为“任何CPU”修复此问题,我可以通过编程方式访问我的注册表中的所有树,因为它们在regedit中以图形方式显示。

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