2

C# コードから javac を呼び出しています。もともと私はその場所を次のようにしか見つけませんでした:

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

しかし、JDK を新しいコンピューターにインストールしたところ、JAVA_HOME 環境変数が自動的に設定されないことがわかりました。環境変数を要求することは、過去 10 年間、どの Windows アプリケーションでも受け入れられなかったため、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;
    }
}
4

3 に答える 3

4

Windows を使用している場合は、レジストリを使用します。

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java 開発キット

そうでない場合は、環境変数にかなりこだわっています。このブログ エントリは役に立つかもしれません。

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;
}
于 2009-10-23T17:50:18.633 に答える
1

おそらく、レジストリで JDK インストール アドレスを検索する必要があります。

別の方法として、このディスカッションを参照してください。

于 2009-10-23T17:47:36.753 に答える
0

64 ビット OS (Windows 7) の場合、レジストリ キーは次の場所にあります。

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Development Kit

32 ビット JDK を実行している場合。したがって、上記に基づいてすべてのコードを記述した場合は、もう一度テストしてください。

Microsoft レジストリのリダイレクト/リフレクションについては、まだ完全には理解できていません。

于 2011-02-17T12:58:04.493 に答える