2009-07-27 11 views
10

Czy istnieje standardowy sposób, aby to zrobić? Rozumiem, że może to być zależne od platformy. Nasz produkt jest teraz obsługiwany tylko w systemie Windows - więc przypuszczam, że właśnie to mnie interesuje właśnie teraz. Jedyne, co mogę wymyślić, to albo przeskanować rejestr, albo zindeksować system plików. Skanowanie systemu plików wygląda na to, że może to zająć naprawdę dużo czasu - a rejestr może być niewiarygodny. Czy powinienem zrobić oba? Jakieś inne sugestie? Próbowałem szukać API, żeby to zrobić bez powodzenia.Programowo ustal, jakie JDK/JRE są zainstalowane na moim pudełku.

Odpowiedz

3

Najpierw zacznę od wyszukania zmiennej środowiskowej JAVA_HOME (i prawdopodobnie JDK_HOME, chociaż jest to o wiele mniej powszechne), a następnie określenia, która to wersja i czy jest to JDK czy JRE.

Po tym sprawdzeniu, czy nie występują wspólne lokalizacje. Znajdź katalog plików systemowych systemu (nie zakładaj, że jest to C: \ Program Files, mimo że jest to 99,5% czasu) i szukaj wspólnych lokalizacji instalacji pod tym (np. Java).

Nie wykonałbym wyczerpującego wyszukiwania.

Warto zapytać: czy naprawdę potrzebujesz znaleźć JDK w ten sposób? Czy nie możesz po prostu spytać użytkownika, z jakiego JDK chce skorzystać, sugerując prawdopodobnie te łatwe, które już znalazłeś?

+0

Cletus można bronić, dlaczego nie zrobi wyczerpującego poszukiwania? Intuicyjnie zgadzam się tutaj, ale szukam mocnych powodów. –

+0

Wyczerpujące wyszukiwanie wymagałoby przeszukiwania wszystkich dysków twardych dla plików java.exe lub javac.exe (zakładając okna), co może zająć dużo czasu. –

+0

Sugerujemy ograniczenie wyszukiwania do C: \ Program Files \ i zmiennej środowiskowej% PATH% oprócz dwóch zmiennych wymienionych powyżej. –

1

Prawdopodobnie wybrałabym kombinację szukania kluczy rejestru zainstalowanych w Javie i przeszukiwania domyślnych lokalizacji do instalacji (co nie powinno zająć zbyt dużo czasu).

Alternatywnym podejściem byłoby połączenie małej aplikacji Java, która drukuje różne szczegóły, takie jak działająca maszyna JVM.

34
System.out.println(System.getProperty("java.version")); 

Inne właściwości here

+0

To tylko informuje wersję JRE wykonującą kod - nie co JDK/JRE są zainstalowane – Jonik

+0

Niestety, źle zrozumiałem pytanie. Możesz użyć rejestru i jeśli nic nie znaleziono, zapytaj użytkownika. Kluczem jest HKEY_LOCAL_MASHINE/SOFTWARE/JavaSoft/Java Development Kit –

Powiązane problemy