# Installer, generierbar aus Programm



## OddParity (22. Mai 2011)

Ich bin auf der Suche nach Ideen, um ein Problem zu lösen. Ich habe schon einiges an Suche hinter mir, aber nichts passt einwandfrei.

Das Problem ist folgendes: Ich bin dabei, eine Anwendung zu programmieren ... deren Sinn erstmal irrelevant ist. Wichtig ist, dass die Nutzer keine(!) Computerkenntnisse haben. Die Anwendung beinhaltet Swing-Komponenten. Die Frage ist nun, wie ich die Anwendung verteile/installiere/starte.

Momentan habe ich folgendes:
- ausführbares Jar-file (outer-jar), Doppelklick entpackt alle Inhalte in einen temporären Ordner, der ein inneres Jar-file (inner-jar) enthält, outer-jar-Programm führt inner-jar aus. inner-jar beinhaltet das eigentliche Hauptprogramm und arbeitet mit den files im temporären Ordner. Wenn das Programm beendet wird, packt es alle files aus dem temporären Ordner in ein neues outer-jar (das alte wird überschrieben --> man hat nun veränderte files im neuen outer-jar, das für den nächsten start bereit ist). dann ruft das noch laufende inner-jar an neues outer-jar, das wartet, bis inner-jar korrekt beendet wurde (schreibschutz aufgehoben). outer-jar löscht dann den temporären ordner.
--> So wie es jetzt ist, können vorgefertigte Argumente für verschiedene Programm-Modi in einem Argument-file im gepackten outer-jar mitgegeben werden. Der Nutzer braucht nichts zu installieren. Das Programm kann, egal wo es liegt, sofort ausgeführt werden. Aus dem Programm heraus können neue Programme (selbes Programm, unterschiedliche Start-Argumente) exportiert werden, die wiederum dieselben Eigenschaften haben.

Das alles funktioniert einwandfrei.

Problem: Es geht nur, wenn Java installiert ist.

Ziel: Ein Installer, der überprüft, ob eine JVM installiert ist und eine mitbringt, die ohne Download installiert werden kann (oder besser noch, die JVM mitbringt, die das Programm direkt ausführen kann, ohne installieren).

--> Das ist mit z.B. JSmooth ja möglich, aber hier das schwierige: Das inner-jar muss in der Lage sein, eine Programm-Kopie zu exportieren, die bei Ausführung andere Argumente hat, aber gleiche Installer-Möglichkeiten. Wie auch immer der Installer generiert wird, es muss mit java-code oder kommandozeile möglich sein.

Irgendwelche Ideen? Es ist sehr unkonventionell, das ist mir klar und vielleicht nicht wirklich verständlich. Danke im Vorraus für jegliche Ideen.


----------



## maki (22. Mai 2011)

Du könntest ja eine JRE mitausliefern, die funktiioniert ohne Installation, ist aber Plattformabhängig und braucht natürlich mehr Speicherplatz.


----------



## OddParity (23. Mai 2011)

maki hat gesagt.:


> Du könntest ja eine JRE mitausliefern, die funktioniert ohne Installation, ist aber Plattformabhängig und braucht natürlich mehr Speicherplatz.


Das habe ich mir auch schon gedacht. Folgendes Problem: Das Programm soll möglichst als eine(!) ausführbare Datei vorliegen, in der alles gepackt ist, so wie jetzt. Das wäre der Idealfall. Ich denke mir aber, dass ich wohl zu einer Order-Struktur übergehen muss, also einen Installer habe, der JVM (wenn nicht installiert) und Programm installiert oder einfach die JRE mit in den Ordner reinhaut. Problem ist: Ist es möglich, einen solchen Installer aus dem Programm heraus zu erstellen, um wie erwähnt eine installierbare Version mit anderen Start-Parametern zu exportieren?

Wer sich fragt, warum so etwas möglich sein soll: Die Anwendung hat eine Reihe von Spielen, die für medizinische Rehabilitation gedacht ist (weder Therapeuten noch Patienten haben PC-Kenntnisse). Im Normalfall hat das Programm ein GUI mit Spieleauswahl, Benutzerverwaltung, etc. Es soll aber auch möglich sein, eine Autorun-Variante mit besonderen Parametern zu exportieren. Die Parameter werden im Programm zusammengestellt und dann muss eine voll installierbare Autorun-Version des Programms erstellt werden. Ein Einstellungs-xml-file und die Kommandozeilen Parameter beim Start sind dabei immer anders. Sinn ist dann, dass ein Patient ohne viel wissen zu müssen, das Autorun-Programm zuhause installieren und starten kann.


----------



## Marcinek (23. Mai 2011)

Hallo,

das was du brauchst ist einfach ein selbst entpackendes Archiv. Das gibt es überall.

Da packst du eine JRE rein und machst eine start.bat rein oder start.exe und sagst dieser, dass sie die jvm aus dem aktuellen Verzeichniss nehmen soll.

Gruß,

Martin


----------

