2012-05-21 13 views
5

Używam Inno Setup, aby utworzyć instalator dla projektu, nad którym pracuję, i potrzebuję go do ustawienia zmiennej środowiskowej java, aby po uruchomieniu cmd nie otrzymywały java nie znaleziono błędu lub coś w tym stylu.Inno Setup - ustawienie zmiennej środowiska Java

Znalazłem kilka innych postów związanych z Inno Setup i ustawieniowymi zmiennymi środowiskowymi, ale czy ktoś wie coś konkretnego dla tej instancji?

+0

nie środowisko wykonawcze Java instalator już to zrobić ? – Deanna

Odpowiedz

10

Zakładając Java jest zainstalowana w domyślnej lokalizacji program files/Java, coś jak to powinno działać w Twoim przypadku:

[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 

Nie jestem pewien, która zmienna środowiskowa chcesz ustawić - ścieżkę lub JAVA_HOME - więc dodałem je oba.

Zmiana PATH nie powinna być konieczna, ponieważ instalator Java zwykle dodaje się do ścieżki; IIRC kopiuje java.exe i javaw.exe do jednego z katalogów systemowych.

+3

Nie zapomnij o dyrektywie ChangesEnvironment. – Deanna

+0

@Deanna dzięki, nie wiedziałem o tym! Teraz mogę usunąć wymóg ponownego uruchomienia z jednego z naszych instalatorów. – Joni

+0

Przepraszamy za spóźnioną odpowiedź, ale to była odpowiedź, której szukałem i działałem doskonale. – Howes

2

Dodawanie do @ odpowiedź Joni, można dostać katalog instalacyjny Java z rejestru i używać stałych skryptu aby ustawić zmienną środowiskową:

(EDIT: dzięki @TLama do korekty kodu)

[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 jestem daleko od bycia ekspertem Pascal-skrypt, kod może być dużo lepiej, chociaż teraz to zostało poprawione przez @TLama :))

+0

Twój kod jest zdecydowanie poprawny (mógł zostać ["skrócono"] (http://pastebin.com/bttNaCEG) przez usunięcie dodatkowych bloków "begin..end", może istnieć stała dla ścieżki klucza rejestru JRE (DRY sort) i można było usunąć jedno 'if' używając operatora' and', a powrót z funkcji mógł być 'exit' zamiast' break' - wszystkie drobne lub kosmetyczne rzeczy). – TLama

+0

@TLama wielkie dzięki, obydwa wkleiłem twój kod i nauczyłem się kilku rzeczy :) – Matthieu

+0

Serdecznie witamy! – TLama

Powiązane problemy