2011-01-25 14 views
8

Sto provando a rilevare se c'è una JVM installata e dove si trova, quindi posso eseguire java.exe.Come rilevare presenza e posizione di JVM su Windows?

Tutto quello che sono riuscito a trovare è HKCU\Software\JavaSoft\Java Runtime Environment\<ver>. È sicuro presumere che sia installato in %PROGRAMFILES%\Java\jre<ver>?

Sto cercando di farlo in C#, ma presumo che la risposta sia piuttosto agnostica del linguaggio, quindi qualsiasi risposta è apprezzata.

EDIT: Ok mi sciocca, ho trovato How to detect whether java runtime is installed or not on a computer using c# che mi indicò HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion che funziona con HKLM\Software\JavaSoft\Java Runtime Environment\<ver>\JavaHome. Sono riuscito a trovarli al di sotto di HKLM\Software\Wow6432Node\JavaSoft\Java Runtime Environment. C'è un modo per rilevare quale di questi dovrei controllare senza cercare di annusare il tipo di CPU?

+0

La voce di registro contiene comunque tutte le versioni di Java? Poiché alcune applicazioni hanno versioni precedenti di JRE in bundle con loro e possono sovrascrivere le voci del registro precedenti, il che è un vero problema. – biziclop

+0

@biziclop Contiene tutte le versioni affiancate alla chiave CurrentVersion descritta sopra che punta al JRE predefinito –

+0

Che bello sapere, grazie. La mia osservazione è ancora valida, non fidatevi ciecamente dell'attuale versione. :) – biziclop

risposta

4

ho intenzione di gettare il cappello sul ring con il codice che ho finito per usare:

string javaDirectory = null; 

// Native registry key - 32b on 32b or 64b on 64b 
// Fall back on 32b Java on Win64 if available 
RegistryKey javaKey = 
    Registry.LocalMachine.OpenSubKey("SOFTWARE\\Javasoft\\Java Runtime Environment") ?? 
    Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Javasoft\\Java Runtime Environment"); 

if (javaKey != null) 
{ 
    string javaVersion = javaKey.GetValue("CurrentVersion").ToString(); 
    try 
    { 
     javaDirectory = javaKey.OpenSubKey(javaVersion).GetValue("JavaHome").ToString(); 
    } catch(NullReferenceException) 
    { /* Ignore null deref, means we can't get a directory */ } 
} 

if (javaDirectory == null) 
{ 
    // deal with a lack of Java here. 
} 
2

una JVM correttamente installato su un sistema Windows (molto probabilmente ..) rispondere al comando shell di comando:

java -version 

Questo non restituisce il percorso, ma cercare

java -verbose -version 

(Almeno) una delle righe conterrà la sottostringa rt.jar e questa riga contiene il percorso della macchina virtuale java "attiva".

+0

È necessario impostare o la voce del Registro di sistema per i jar. C'è una funzione WinAPI per ottenere associazioni di file, ma me ne sono dimenticato. – Christian

+0

Sul mio pc di sviluppo, almeno, questo non è vero. 'java' non è registrato in' PATH'. In generale, penso che affidarsi a "PATH" su Windows sia una cattiva idea, semplicemente perché così tante app non si preoccupano di farlo. –

+0

@ Le associazioni di file cristiane non sono affidabili. Alcuni gestori di archivi sovrascrivono l'associazione jar. –

-1

È possibile provare a ottenere la variabile di ambiente "* JAVA_HOME *".

Potrebbe essere utile.

EDIT:

migliore idea sguardo por "CLASSPATH" variabile.

------- start -------- 
C:\Documents and Settings\david>set 
ALLUSERSPROFILE=... 
APPDATA=... 
CLASSPATH=.;C:\Archivos de programa\Java\jre6\lib\ext\QTJava.zip 
CommonProgramFiles=... 
... 
----- end ---- 
+0

Inoltre, sfortunatamente non è stato configurato correttamente sul mio PC di sviluppo. Sicuramente vale comunque la pena provare un primo colpo. Puoi includere un esempio di output per il mio beneficio, per favore? –

+0

Sto osservando le variabili di ambiente di un PC con Java JRE appena installato. Non ho trovato il varialbe "JAVA_HOME" (errore mio, scusa) ma se un cosiddetto "CLASSPATH" può essere utile. – Taber

0

Non ritiene la JRE installare una java.exe in c: \ windows ?

+0

Non sul mio PC, non ovunque nel PERCORSO. (win7 64) –

+1

Questo mi ha solo spinto a fare una ricerca sul mio 'C: \', trovato in 'C: \ Windows \ SysWOW64'. Deve essere un'idea analoga a 'HKLM \ Software \ Wow6432Node'. IMO, sembra che MS abbia seriamente compromesso la compatibilità x86 ... –

+0

@MatthewScharley Ah grazie, vediamo se riesco finalmente a far funzionare Eclipse. –

Problemi correlati