gpt4 book ai didi

.net - 如何以编程方式找到 javac.exe?

转载 作者:行者123 更新时间:2023-11-30 06:38:57 24 4
gpt4 key购买 nike

我正在从 C# 代码调用 javac。原来我只找到它的位置如下:

protected static string JavaHome
{
get
{
return Environment.GetEnvironmentVariable("JAVA_HOME");
}
}

但是,我刚在一台新电脑上安装了JDK,发现它并没有自动设置JAVA_HOME环境变量。 需要环境变量在过去十年中在任何 Windows 应用程序中都是 Not Acceptable ,因此如果未设置 JAVA_HOME 环境变量,我需要一种查找 javac 的方法:

protected static string JavaHome
{
get
{
string home = Environment.GetEnvironmentVariable("JAVA_HOME");
if (string.IsNullOrEmpty(home) || !Directory.Exists(home))
{
// TODO: find the JDK home directory some other way.
}

return home;
}
}

最佳答案

如果您使用的是 Windows,请使用注册表:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java 开发工具包

如果您不是,那么您几乎只能使用环境变量。你可能会发现 this博客条目很有用。

由 280Z28 编辑:

在该注册表项下方是一个 CurrentVersion 值。该值用于在以下位置查找 Java 主目录:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\{CurrentVersion}\JavaHome

private static string javaHome;

protected static string JavaHome
{
get
{
string home = javaHome;
if (home == null)
{
home = Environment.GetEnvironmentVariable("JAVA_HOME");
if (string.IsNullOrEmpty(home) || !Directory.Exists(home))
{
home = CheckForJavaHome(Registry.CurrentUser);
if (home == null)
home = CheckForJavaHome(Registry.LocalMachine);
}

if (home != null && !Directory.Exists(home))
home = null;

javaHome = home;
}

return home;
}
}

protected static string CheckForJavaHome(RegistryKey key)
{
using (RegistryKey subkey = key.OpenSubKey(@"SOFTWARE\JavaSoft\Java Development Kit"))
{
if (subkey == null)
return null;

object value = subkey.GetValue("CurrentVersion", null, RegistryValueOptions.None);
if (value != null)
{
using (RegistryKey currentHomeKey = subkey.OpenSubKey(value.ToString()))
{
if (currentHomeKey == null)
return null;

value = currentHomeKey.GetValue("JavaHome", null, RegistryValueOptions.None);
if (value != null)
return value.ToString();
}
}
}

return null;
}

关于.net - 如何以编程方式找到 javac.exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1614965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com