سؤال

أنا أتصل javac من التعليمات البرمجية C#.أصلا أنا وجدت موقع فقط على النحو التالي:

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

ومع ذلك, أنا فقط تثبيت JDK على الكمبيوتر الجديد وجدت أنه لم يكن تلقائيا تعيين JAVA_HOME متغير البيئة. تتطلب متغير بيئة غير مقبول في أي تطبيق ويندوز على مدى العقد الماضي, لذلك أنا بحاجة إلى وسيلة للعثور على javac إذا JAVA_HOME لم يتم تعيين متغير البيئة:

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;
    }
}
هل كانت مفيدة؟

المحلول

إذا كنت على ويندوز, استخدام التسجيل:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\أدوات تطوير جافا

إذا لم تكن أنت عالق مع متغيرات بيئية.قد تجد هذا دخول بلوق مفيدة.

حرره 280Z28:

تحت مفتاح التسجيل هو CurrentVersion القيمة.تستخدم هذه القيمة إلى العثور على جافا المنزل في الموقع التالي:
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;
}

نصائح أخرى

وربما يجب عليك البحث في التسجيل للحصول على عنوان تركيب JDK.

وكبديل لذلك، نرى هذه المناقشة .

لنظام تشغيل 64 بت (ويندوز 7)، قد يكون مفتاح التسجيل تحت

وHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Development Kit

وإذا كنت تقوم بتشغيل 32 بت JDK. حتى إذا كنت قد كل قانون مكتوب بناء على ما سبق، انتقل الاختبار مرة أخرى.

وأنا حتى الآن لم حصلت رأسي تماما حول في مايكروسوفت إعادة توجيه التسجيل / انعكاس الاشياء حتى الان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top