Java Runtime Environment (JRE): Unable to download http://javadl-esd.sun.com/update/1.6.0/1.6.0_20-b02.xml for installation

Една съвсем рутинна инсталация на Java Runtime Environment (JRE) завърши неочаквано…с грешка:

Unable to download http://javadl-esd.sun.com/update/1.6.0/1.6.0_20-b02.xml for installation

След натискане на OK “инсталационният Магьосник” остава на екрана и се изкушаваш да натиснеш Next…пак грешка:

Странно нали? Последна версия на JRE, свалена от сайта на SUN…Тогава “заподозреният” стана компютъра, на който се опитвах да инсталирам приложението.
Реших да погледна какво се опитва да прави JavaSetup6u20.exe чрез Process Monitor (Sysinternals’ ProcMon).

Маркирал съм интересния ред от последната картинка. Тук инсталационната програма извиква API функцията CreateFile с параметър пътя и името на някакъв конфигурационен файл. Но резултатът е “PATH NOT FOUND”?

Кодът на грешката вероятно е 0x3 – ERROR_PATH_NOT_FOUND – The system cannot find the path specified.

Познайте! Папката %TEMP% не съществуваше (не ме питайте защо)  🙂

Решението:
Създайте папката %TEMP%, ако случайно не съществува. В моя случай това реши проблема и инсталацията премина успешно.

* В зависимост от версията на операционната система променливата %TEMP% има следната стойност:

– Windows 2000/XP/2003: C:\Documents and Settings\<YourUserName>\Local Settings\Temp
– Vista/Server 2008/Windows 7: C:\Users\<YourUserName>\AppData\Local\Temp

** Можете да проверите каква е стойността на %TEMP%, като в команден ред запиешете: SET TEMP

Цялата тази история ме кара (за пореден път) да задам въпроса: Защо програмистите винаги се оповават на дадености?!? В случая инсталационната програма “предполага”, че променливата на обкръжението /environment variable/ %temp% сочи към папка, която съществува!  Хъх…
Това е все едно да използваш указател, който сочи невалидна памет!

Както и да е – направих bug report към SUN (все още е в режим на модериране):

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6962541

Ще видим дали ще ми обърнат внимание 🙂

2 thoughts on “Java Runtime Environment (JRE): Unable to download http://javadl-esd.sun.com/update/1.6.0/1.6.0_20-b02.xml for installation

  1. То ако нямаш темп директория, то при инсталацията и на някои други програми ще пропадне?

  2. Определено е така 🙂 И лошото е, че съобщенията за грешки, които възникнат в този момент ще бъдат объркващи. Например: “Изтеглянето на XYZ беше неуспешно” или “Нямате необходимите административни права”, а не както би било редно: “Папката %TEMP% не съществува”.
    От програмна гледна точка алгоритъмът за избягването на подобни неща е доста…прост:
    1. Съществува ли %temp%? (НЕ->изведи съобщение; ДА->т.2)
    2. Има ли програмата XYZ права да записва в нея? (НЕ->изведи съобщение; ДА->т.3)
    3. …

    Реализацията му не е толкова проста, но все пак това са 70-80 реда код?

    Аз мисля, че всичко идва от следната мисловна извадка:
    Програмистът: “Трябва да изтегля файла XYZ. Къде да го съхраня? Ами в %TEMP% – тази папка е точно за временни файлове и потребителят има пълни права в нея…” – което са си недоказани съждения! Вярно е, че не можеш да се сетиш за всичко, но все пак трябва да обхванеш максимално много варианти 🙂

    Моята практика: когато пиша софтуер – крайния продукт го тестват хора, които не са компютърни спецове. И резултатите са много добри 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

*