2012-05-21 45 views
5

Estoy usando Inno Setup para hacer un instalador para un proyecto en el que estoy trabajando, y lo necesito para configurar la variable de entorno java, para que cuando ejecuten cmd no obtengan un java no encontrado error, o algo por el estilo.Inno Setup - Setting Java Environment Variable

He encontrado algunas otras publicaciones relacionadas con Inno Setup y las variables de entorno de configuración, pero ¿alguien sabe algo específico de esta instancia?

+0

no el tiempo de ejecución de instalación de Java ya lo hacen ? – Deanna

Respuesta

10

Suponiendo Java está instalado en su ubicación predeterminada de archivos de programa/Java, algo como esto debería funcionar en su 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 

No estoy seguro de qué variable de entorno que desea establecer - PATH o JAVA_HOME - entonces los agregué a ambos.

No debería ser necesario cambiar la RUTA ya que el instalador de Java tiende a agregarse a la ruta; IIRC copia java.exe y javaw.exe a uno de los directorios del sistema.

+3

No olvide la directiva ChangesEnvironment. – Deanna

+0

@Deanna gracias, ¡no sabía sobre eso! Ahora puedo eliminar el requisito de reiniciar desde uno de nuestros instaladores. – Joni

+0

Perdón por la respuesta tardía, pero esta fue la respuesta que estaba buscando y funcionó perfectamente. – Howes

2

Sumando a @ respuesta de Joni, se puede obtener el directorio de instalación de Java desde el registro y el uso de las constantes de secuencia de comandos para establecer la variable de entorno:

(EDIT: gracias a @TLama para la corrección de código)

[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 estoy lejos de ser un experto en Pascal-escritura, el código podría ser mucho mejor, aunque ahora se corrigió por @TLama :))

+0

Su código es definitivamente correcto (podría haber sido ['acortado'] (http://pastebin.com/bttNaCEG) quitando esos bloques' begin..end' adicionales, puede haber una constante para la ruta de la clave de registro JRE (Tipo DRY) y se podría eliminar un 'si' utilizando el operador' y', y el retorno desde la función podría haber sido 'salir' en lugar de 'romper' - todo lo menor, o cosas cosméticas). – TLama

+0

@TLama muchas gracias, he pegado el código y aprendido algunas cosas :) – Matthieu

+0

¡De nada! – TLama

Cuestiones relacionadas