Question

J'appelle javac depuis le code C #. À l'origine, je n'ai trouvé son emplacement que comme suit:

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

Cependant, je viens d'installer le JDK sur un nouvel ordinateur et j'ai constaté qu'il ne définissait pas automatiquement la variable d'environnement JAVA_HOME. Exiger une variable d'environnement est inacceptable dans les applications Windows de la dernière décennie. J'ai donc besoin d'un moyen de rechercher javac si la variable d'environnement JAVA_HOME n'est pas définie:

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;
    }
}
Était-ce utile?

La solution

Si vous utilisez Windows, utilisez le registre:

Kit de développement HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java

Si vous ne l'êtes pas, vous êtes pratiquement bloqué avec des variables env. Vous pourriez trouver ce blog entrée utile.

Édité par 280Z28:

Sous cette clé de registre se trouve une valeur CurrentVersion. Cette valeur est utilisée pour trouver la maison Java à l'emplacement suivant:
HKEY_LOCAL_MACHINE \ LOGICIEL \ JavaSoft \ Kit de développement Java \ {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;
}

Autres conseils

Vous devriez probablement rechercher dans le registre une adresse d'installation JDK.

Vous pouvez également consulter la discussion .

Sous OS 64 bits (Windows 7), la clé de registre peut se trouver sous

.

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ JavaSoft \ Kit de développement Java

si vous utilisez un JDK 32 bits. Donc, si vous avez tous écrit du code basé sur ce qui précède, testez à nouveau.

Je ne suis pas encore complètement à l'aise avec la Redirection de registre Microsoft / réflexion encore pour le moment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top