Una semplice tecnica antiproiettile per verificare se il sistema ha jre (windows)

StackOverflow https://stackoverflow.com/questions/812100

  •  03-07-2019
  •  | 
  •  

Domanda

Scusate la mia domanda da principiante: P Se premo " java -version " nel cmd su un sistema Windows, sono garantito che il sistema sarà in grado di eseguire i file .jar se non visualizzo alcun errore ?

È stato utile?

Soluzione

Immagino che l'unico modo garantito per verificare la presenza di un JRE sia provare a eseguire un piccolo programma Java.

O forse nemmeno quello - suppongo che un sistema potrebbe avere solo una parte della libreria standard Java installata, nel qual caso un JAR di test di piccole dimensioni potrebbe funzionare correttamente, ma un programma completo potrebbe non esserlo. Anche se non riesco a immaginare perché qualcuno si prenda la briga di installare un sistema in quel modo.

Altri suggerimenti

Dalla riga di comando dovresti essere in grado di invocare " java --version " che restituirà un errore se java non è installato o le informazioni sulla versione attualmente installate.

Beh, ovviamente no. Puoi inserire un file vuoto chiamato java.bat anywhare in PERCORSO, come C: \ Windows \ System32. Richiamo di " java " non genererà alcun errore ma non significa che sia installato un JRE.

Perché non eseguire un file di piccola classe, che scrive un valore in un file che si controlla quindi? Se fallisce, non funziona.

Un buon valore potrebbe essere il valore della proprietà di sistema java.version.

Su Windows, è possibile controllare il registro nel plug-in HKLM \ SOFTWARE \ JavaSoft \ Java. Da lì, ogni sottochiave è un JRE installato.

modifica Ecco il codice C # che restituirà una matrice di stringhe con i JRE installati

public string[] GetInstalledJavas() {
        // hold the registry subkeys that list the installed JRE's
        string[] jres = null;
        try {
            RegistryKey myKey = Registry.LocalMachine;
            myKey = myKey.OpenSubKey(@"SOFTWARE\JavaSoft\Java Plug-in"); // read-only
            jres = myKey.GetSubKeyNames();
        } catch (Exception myException) {
            Console.Writeline(myException.ToString());
        }
        return jres;
}

In realtà suggerirei, se ti preoccupi solo di controllare su macchine Windows, controllare il registro per un gestore per JNLP ... che dovrebbe garantire la presenza di un JRE relativamente recente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top