繁体   English   中英

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

[英]Programmatically check whether the Java Development Kit is installed

作为安装程序的一部分,我正在构建中,我想检查是否已经安装了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开发工具包不存在。

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

我也以编程方式查看了我的环境变量,并且似乎也没有指向JDK的存在(正如我上面所说的,它存在于注册表中,并且我正在使用它进行Java开发)对于该程序,我正在为其构建安装程序)。

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

尝试这个

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

如果为空,则不应安装

您可以通过获取整个系统环境变量(即System.getenv();找到JDK System.getenv(); 并找到存在的jdk或对于Windows执行命令"where javac" ,对于Linux执行命令"whereis javac" 对于示例代码, 通过Java 获取环境变量Command executor

如果您正在机器上寻找Java 开发套件,则可以尝试检查JAVA_HOME环境变量,该变量通常指向JDK的安装根目录。

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

看来我在吠错了(注册表)树。 我还没有意识到注册表根目录取决于我的应用程序的配置平台。 因为我的应用程序的目标平台设置为x86,所以所有搜索都始于我注册表的Wow6432Node。 将目标平台更改为“ Any CPU”可以解决此问题,并且我可以以编程方式访问注册表中所有以图形方式显示在regedit中的树。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM