[英]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.