PDA

Visualizza la versione completa : [JAVA] InnoSetup script: richiedere percorso JAVAHOME


eumene
29-10-2005, 13:41
Ciao a tutti.

Posto qui, anche se non ho la certezza che vada bene.

Sto iniziando ad utilizzare l'Inno Setup (una potenza!) e vorrei realizzare un wizard un po più complesso dello standard.

In particolare vorrei chiedere all'utente dove ha installato la JRE, in quanto ho la necessita di copiare alcune dll nella cartella <JRE>/lib.

Sarebbe anche bello riuscire a trovarla da solo la JRE installata sul sistema.

Qualcuno sa darmi qualche input, ho provato a studiare un po' gli esempi e la documentazione, ma un po' troppo inglese per me ("Sorry!")

Se sapete anche indicarmi un reference in italiano, ve ne sarei mooolto grato.

Ciao a tutti.

eumene
29-10-2005, 17:07
Sono riuscito a realizzare ls ricerca del path della JRE ed eventualmente bloccare il setup in caso di assenza.

Posto il codice da inserire nel tag code dell'Inno Setup Script:


var
javawExePath: String;
javaMinVersion: String;

(* cerca JRE, in Registry *)
function getJREVersion(): String;
var
javaVersion: String;
begin
javaVersion := '';

(* Cerco chiave su registro SOFTWARE\JavaSoft\Java Runtime Environment *)
RegQueryStringValue(HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', javaVersion);

(* Catturo versione *)
GetVersionNumbersString(javaVersion, javaVersion);

(* Ritorno versione *)
Result := javaVersion;
end;

(* cerca JRE, in Registry *)
function getJDKVersion(): String;
var
jdkVersion: String;
begin
jdkVersion := '';

(* Cerco chiave su registro SOFTWARE\JavaSoft\Java Development Kit *)
RegQueryStringValue(HKLM, 'SOFTWARE\JavaSoft\Java Development Kit', 'CurrentVersion', jdkVersion);

(* Catturo versione *)
GetVersionNumbersString(jdkVersion, jdkVersion);

(* Ritorno versione *)
Result := jdkVersion;
end;

(* Carco path "javaw.exe" in JDK or JRE directory *)
(* in registry. Verifico esisteza del Java. *)
(* Se non trovo niente, ritorno "". *)
function GetJavaPath(Default: String): String;
var
javaVersion: String;
javaHome: String;
path: String;
begin
path := '';

(* Se ho già trovato path java *)
if Length(javawExePath) > 0 then
begin

(* Ritorno path java *)
Result := javawExePath;
path := javawExePath;
end;

(* cerco JDK *)
javaVersion := getJDKVersion();

(* Se non ho ancora trovato il Java AND javaVersion è valido && la versione >= di javaMinVersion *)
if (Length(path) = 0) and (Length(javaVersion) > 0) and ((javaVersion) >= javaMinVersion) then
begin

(* Catturo path del JDK *)
RegQueryStringValue(HKLM, 'SOFTWARE\JavaSoft\Java Development Kit\' + javaVersion, 'JavaHome', javaHome);

(* Costruisco path per JRE *)
path := javaHome + '\bin\' + 'javaw.exe';

(* Se path costruito esiste *)
if FileExists(path) then
begin

(* Trovato JAVA -> ritorno percorso *)
Log('(JDK) found javaw.exe: ' + path);
Result := javaHome;
end;
end;

(* Se non ho ancora trovato il Java *)
if Length(path) = 0 then
begin

Log('(JRE) JDK not found, looking for JRE');

(* cerco JRE *)
javaVersion := getJREVersion();

(* Se javaVersion è valido && la versione >= di javaMinVersion *)
if (Length(javaVersion) > 0) and ((javaVersion) >= javaMinVersion) then
begin

(* Catturo path del JRE *)
RegQueryStringValue(HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment\' + javaVersion, 'JavaHome', javaHome);

(* Costruisco path per JRE *)
path := javaHome + '\bin\' + 'javaw.exe';

(* Se path costruito esiste *)
if FileExists(path) then
begin

(* Trovato JAVA -> ritorno percorso *)
Log('(JRE) found javaw.exe: ' + path);
Result := javaHome;
end
end;
end;

(* Memorizzo risultato del path in variabile globale *)
javawExePath := Result;
end;

(* Funzione richiamata all'avvio del setup *)
function InitializeSetup(): Boolean;
var
javaPath: String;
begin

(* JRE version richiesta *)
javaMinVersion := '1.4.2';

(* Catturo JAVAHOME *)
javaPath := GetJavaPath('');

(* Se trovato JAVAHOME *)
if Length(javaPath) > 0 then
begin

(* Ritorno true *)
Result := true;
end
else
begin
MsgBox('Impossibile trovare Java Development Kit o Java Runtime ' + javaMinVersion + ', or superiore, installato.' + #13 +
'JDK o JRE, ' + javaMinVersion + ' o superiore richisto per proseguire l''installazione.' + #13 +
'Puoi scaricare JRE direttamente da http://java.sun.com. Intalla la JRE e riavvia il setup.', mbInformation, MB_OK);

(* Ritorno false *)
Result := false;
end;
end;


Adesso avrei un'altra necesità: creare un database MySql e costruirne la struttura iniziale.

Non ho molta dimestichezza, ma per quel che ho visto Inno Setup è scritto in Delphi.

E' molto probabile che il codice in Delphi per la costruzione di un db in MySql funzioni anche come script di Inno Setup.

A questo punto chiedo a chi ne sa più di me (alka?) un esempio di codice Delphi per lavorare con MySql.

Ho visitato anche www.torry.net, ma ho ancora qualche dificcoltà

Grazie a tutti.

Matteo982
07-12-2005, 19:08
Scusa ma questo codice che hai inserito dove va messo di preciso? Ho appena installato inno setup e non sono molto pratico...

C'è anche un modo per lanciare il setup del jre in caso non venga trovato? Al posto di mandare un semplice messaggio di avviso!

Ciao. :ciauz:

eumene
08-12-2005, 12:46
Il codice postato va inserito nel tag, se mi concedi la nomenclatura, "code", solitamente ultimo tag dello script di Inno Setup (ovviamente la posizione non è vincolante). In questo tago puoi scrivere le tue funzioni in modo che vengano lanciate dal setup.
La funzione "InitializeSetup()" sarà il tuo main: viene invocata all'avvio dell'istallazione.

Nei vari esempi forniti con il software troverai molte spiegazioni sull'uso del programma: anch'io sono nuovo sull'argomento, ma sono riuscito a realizzare un setup abbastanza soddisfacente, riuscendo anche a realizzare delle logiche di file condivisi.

L'help on line è anche ben fatto e con qualche piccola base d'inglese è semplice da comprendere.

Per avviare programmi alla fine dell'istallazione, se questa è andata a buon fine, e comunque prima dell'ultima slide, quella di "Saluti e baci" per intederci, è posibile avviare alcuni programmi, semplicemente inserendoli nel tag "run" secondo le specifiche della sintassi.

Fino ad ora non ho mai avuto la necessità di utilizzaro, anche se l'idea di avviare l'istallazione della jre non è male come ipotesi, quindi non so dirti molto, ma sulla documentazione è ben descritta la funzionalità.

Inoltre sono certo che è possibile condizionare il processo di istallazione mediante funzioni definite nel tag "code".
Per esempio, dovendo copiare dei file nella cartella bin della jre, che può variare da pc a pc, ho scritto questo codice nel fat "file":



Source: "JavaComm\win32com.dll"; DestDir: "{code:GetJavaPath}\bin\"; Flags: sharedfile uninsnosharedfileprompt; Components: main


Noterai che il percorso di destinazione è realizzato concatenando \bin\ al risultato di una funzione GetJavaPath

Spero di esserti stato in qualche modo di aiuto.

Ciao

Loading