2012-05-21 6 views
5

Sto utilizzando Inno Setup per creare un programma di installazione per un progetto su cui sto lavorando, e ho bisogno di impostare la variabile di ambiente java, in modo che quando eseguono cmd non ottengano un java non trovato errore o qualcosa del genere.Inno Setup - Impostazione della variabile di ambiente Java

Ho trovato alcuni altri post relativi a Inno Setup e alle variabili di ambiente di impostazione, ma qualcuno conosce qualcosa di specifico per questa istanza?

+0

non ritiene l'installazione di runtime Java già lo fanno ? – Deanna

risposta

10

Supponendo che Java è installato in tutti i suoi file di programma di localizzazione default/Java, qualcosa di simile dovrebbe funzionare nel tuo caso:

[Registry] 
; set PATH 
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"PATH"; ValueData:"{olddata};{pf}\Java\bin"; Flags: preservestringtype 
; set JAVA_HOME 
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"JAVA_HOME"; ValueData:"{pf}\Java"; Flags: preservestringtype 

[Setup] 
; Tell Windows Explorer to reload the environment 
ChangesEnvironment=yes 

io non sono sicuro di quale variabile d'ambiente che si desidera impostare - PATH o JAVA_HOME - Quindi li ho aggiunti entrambi.

Cambiare PATH non dovrebbe essere necessario in quanto il programma di installazione di Java tende ad aggiungersi al percorso; IIRC copia java.exe e javaw.exe in una delle directory di sistema.

+3

Non dimenticare la direttiva ChangesEnvironment. – Deanna

+0

@Deanna grazie, non sapevo di quello! Ora posso rimuovere il requisito di riavvio da uno dei nostri programmi di installazione. – Joni

+0

Ci scusiamo per la risposta tardiva, ma questa era la risposta che stavo cercando e ha funzionato perfettamente. – Howes

2

aggiungendo fino a @ risposta di Joni, è possibile ottenere la directory di installazione di Java dal Registro di sistema e utilizzare le costanti di script per impostare la variabile d'ambiente:

(EDIT: grazie a @TLama per la correzione del codice)

[Registry] 
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"JAVA_HOME"; ValueData:"{code:GetJava32Path|6}"; Flags: preservestringtype 

[Code] 
const 
    RegKeyJRE = 'SOFTWARE\JavaSoft\Java Runtime Environment\'; 

function GetJava32Path(MinVersion: string): string; 
var 
    I: Integer; 
    Path: string; 
    Versions: TArrayOfString; 
begin 
    Result := ''; 
    if RegGetSubkeyNames(HKLM, RegKeyJRE, Versions) then 
    for I := 0 to GetArrayLength(Versions)-1 do 
     if (Versions[I][2] = '.') and (Versions[I][3] >= MinVersion) and 
     RegQueryStringValue(HKLM32, RegKeyJRE + Versions[I], 'JavaHome', Path) then 
     begin 
     Result := Path; 
     Exit; 
     end; 
end; 

(NB sono ben lungi dall'essere un esperto di Pascal-script, il codice potrebbe essere molto meglio, anche se ora è stato corretto da @TLama :))

+0

Il tuo codice è sicuramente corretto (potrebbe essere stato ['abbreviato'] (http://pastebin.com/bttNaCEG) rimuovendo quei blocchi extra' begin..end', potrebbe esserci una costante per il percorso della chiave di registro JRE (Tipo ASCIUTO) e potrebbe essere rimosso un 'if' usando l'operatore' and', e il ritorno dalla funzione potrebbe essere stato 'exit' piuttosto che' break' - tutte cose minori o estetiche. – TLama

+0

@TLama grazie mille, ho incollato entrambi il codice e ho imparato un po 'di cose :) – Matthieu

+0

Siete i benvenuti! – TLama