2009-12-04 17 views
5

Ich habe eine Anwendung, für die wir IzPack verwenden, um das Installationsprogramm zu erstellen. Das Installationsprogramm funktioniert einwandfrei in seinem aktuellen Zustand. Ich muss jedoch Funktionalität hinzufügen, die es ermöglicht, prüfen, ob eine vorhandene Version der Software installiert wurde.Wie kann IzPack nach einer vorhandenen Version der Software suchen?

Ich verstehe, IzPack unterstützt diese aus der Box mit seiner CheckedHelloPanel, leider, dass nur für Windows funktioniert, wie es scheint auf die Windows-Registrierung abhängen.

Gibt es eine Möglichkeit, IzPack so zu konfigurieren, dass es vorhandene Installationen erkennen kann?

Ich muss in der Lage sein zu erkennen, ob es eine gibt und nur eine Nachricht anzeigen, die den Benutzer benachrichtigt ... Bonuspunkte für wie der Benutzer die Option geben kann, das Deinstallationsprogramm der vorhandenen Installation auszulösen.


  • wird angenommen, dass die Software nur den neuen Installer nur
  • IzPack mit installiert werden: bitte Alternativen nicht vorschlagen, wie wir das jetzt nicht
  • ändern können, wenn Sie <validator> vorschlagen, mit, geben Sie bitte ein Codebeispiel der Validator-Klasse, weil ich dies berücksichtigt habe, aber nicht weiß, wo ich anfangen soll

Antwort

0

Es funktioniert nur unter Windows, weil nur Windows eine Registrierung hat. In Linux-Apps gibt es jedoch traditionell keine benutzerdefinierten einheitlichen Standorte. Zum Beispiel würden Ihre Run-Skripte in einen bin-Ordner gehen, Ihre Binärdateien würden in/opt gehen, Ihre Dokumentation würde in/var usw. gehen. Die Idee, dass es ein einzelnes "your-app" -Verzeichnis gibt, das vom Benutzer ausgewählt wird Alles, was mit der Anwendung zu tun hat, ist ein Windows-Konzept.

Wie auch immer, der Weg, dies unter Linux zu lösen, besteht darin, die verschiedenen Teile Ihrer App an nicht benutzerdefinierten Orten zu installieren. Auf diese Weise wissen Sie genau, wo Ihre App wäre, wenn sie bereits installiert wäre.

+0

Dank Gabriel, das ist eine gute Strategie, aber ich wollte wissen, wie man das erreichen würde, speziell für IzPack? – bguiz

+0

Das ist nur grundlegende IzPack-Funktionalität ... Kopieren Sie Ihre Binärdateien an verschiedenen Orten. Sehen Sie sich das packs-Element in der IzPack-Dokumentation an: http://izpack.org/documentation/installation-files.html#the-packs-e-element-packs –

2

Ich schrieb dies, damit meine Anwendung über die jboss-Installation installiert werden kann.

public class JBossChecker { 

private static boolean tempJBossEnv; 
private static boolean tempJBossDirectoryExists; 

static { 
    String s = System.getenv("JBOSS_HOME"); 
    tempJBossEnv= (s!=null); 

    if(tempJBossEnv) { 
    File f = new File(s); 
    tempJBossDirectoryExists= (f.exists() && f.isDirectory()); 
    } 
    hasJBossEnv =tempJBossEnv; 
    hasJBossDir = tempJBossDirectoryExists; 
} 

public static boolean hasJBossDir; 
public static boolean hasJBossEnv; 

public static void main(String[] args){ 
    System.out.println("Jboss environment "+hasJBossEnv); 
    System.out.println("Jboss directory "+hasJBossDir); 

} 
} 

Dann muss der Installateur einen Abschnitt wie

<conditions> 
    <condition type="java" id="jbossEnv"> 
      <java> 
       <class>au.com.codarra.ela.installer.JBossChecker</class 
       <field>hasJBossEnv</field> 
      </java> 
      <returnvalue type="boolean">true</returnvalue> 
</condition> 

<condition type="java" id="jbossDir"> 
      <java> 
       <class>au.com.codarra.ela.installer.JBossChecker</class> 
       <field>hasJBossDir</field> 
      </java> 
      <returnvalue type="boolean">true</returnvalue> 
</condition> 

</conditions> 

<installerrequirements> 
<installerrequirement condition="jbossEnv" message="Your system does not have the environment variable JBOSS_HOME set. Cannot update your system. Is XXXX installed on this system?" /> 
<installerrequirement condition="jbossDir" message="Your system does not have a directory at the location in the environement variable JBOSS_HOME . Cannot update your system. Is XXXX installed on this system?" /> 
</installerrequirements> 

<dynamicvariables> 
<variable name="INSTALL_PATH" value="${ENV[JBOSS_HOME]}"/> 
</dynamicvariables> 
<jar src="c:\dev\xxxx\build\installer.jar" /> 

Das Bit am Ende stellt sicher, IzPack es in das Gefäß Installer erstellt.

+0

@Tim könnten Sie den Java-Code einrücken/neu formatieren? Es wird nicht von SO geparst. – bguiz

+0

@Tim danke für die Neuformatierung des Codes! Ich habe eine andere Frage: Wo setzt du deine Klasse "JBossChecker" ab? Wie stellst du sicher, dass sie in den Klassenpfad geladen wird, wenn das Installationsprogramm ausgeführt wird? – bguiz

+0

Die letzte Zeile des Codes * jar * fügt dieses jar in das erstellte izpack-Installationsprogramm ein. So funktioniert es wie geschrieben. –