Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [InnoSetup Script/JAVA] Richiedere percorso JAVAHOME

    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.

  2. #2
    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:
    codice:
    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.

  3. #3
    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.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  4. #4
    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":

    codice:
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.