Wegginho Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 (bearbeitet) Hallo Leute, nach einem halben Tag googlen gestern und der ziemlich zermürbenden Suche in der Java Hilfe, würd ich einfach gerne mal wissen, wie man mit Hilfe von Java Umgebungsvariablen erzeugt. Hintergrund ist ein Programm innerhalb meiner Firma, das ersetzt werden muss, auf dessen Basis aber Umgebungsvariablen gesetzt wurden, die später in Batch dateien verwendet werden. Beispiel: Umgebungsvariablen: "t1=DE" "t2=location" "t3=department" usw. Dass man mit (Achtung code!) System.getenv() das gesamte Environment auslesen kann ist toll, hat mir auch wirklich weitergeholfen, nur andersherum habe ich bisher von Runtime.getRuntime().exec("cmd /c set t1=DE") bis System.setProperty alles ausprobiert, jedoch hat nichts weitergeholfen. MfG Basti Bearbeitet 13. August 2009 von Wegginho vertippt! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Runtime.getRuntime().exec("cmd /c set t1=DE") Wenn du Variablen in einer CMD setzt, gelten die nur für die CMD-Sitzung. Wenn es sich nur um Windowsrechner handelt, würde ich einfach setx ausführen. Ob es einen plattformübergreifenden Weg gibt, weiß ich nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wegginho Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Ja, du hast das Problem schon richtig erkannt. Danke schonmal für deinen Beitrag. Nur würde ich gerne alles in einer shell abhandeln, da ich das Programm für Windows UND Unix (AIX) mache. Quasi: [1]Benutzer startet über cmd-Programm mein Java Programm [2]Benutzer wählt die gewünschte Einstellung aus [3]Programm startet eine cmd, gibt alle Env-Variablen durch, startet 5 Batch dateien [4]Finales-Programm startet Das Problem ist ja, dass ich wenn ich Runtime.getRuntime().exec("cmd /c set t1=DE") benutze, immer wieder eine neue shell bekomme, ungefähr so als würd ich für jeden Set Befehl ein eigenes Fenster benutzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Dann schreib dir doch 2 Batchdateien. Eine für Windows (die setx aufruft) und eine für UNIX und starte diese je nach Betriebssystem. :confused: Das Problem bei Windows ist z.B., dass du zwar die Registry editieren könntest (und die Dateien einträgst), aber das Controlset (glaub so heißt das) noch nicht aktualisiert wurde. Unter unixoiden System gibts glaub ich ein ähnliches Problem. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wegginho Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Dann hätten wir ja den doppelten Pflegeaufwand für ein Programm, dass nur dafür da ist andere Programme zu starten. Es geht hier ja nicht nur um die 3 Variablen. Ich rede hier von über 30 verschiedenen Variablen, die auch gerne mal das Limit eines einzigen Aufrufs mit Parametern sprengen können. Gibt es vielleicht eine möglichkeit, ein shell (command) fenster zu öffnen und in dieses einzelne Befehle einfließen zu lassen? Das wäre dann ja quasi schon was ich bräuchte. Problem ist, wie ich vorhin schon erwähnte, dass man mit Runtime.getRuntime().exec() immer wieder eine neue shell öffnet, die unberührt von vorherigen Aufrufen ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Ich glaub ich hatte mich falsch ausgedrückt: Die Batchdatei soll nur eine Umgebungsvariable setzen. Diese soll aber vom Programm mehrfach aufgerufen werden. D.h. Batch/Shell bekommt Parameter und schreibt diesen Parameterwert als Umgebungsvariable ins System. Von Javaseite wird die Datei dann x-Mal aufgerufen. (Man könnte natürlich auch gleich mehrere Parameter übergeben und dann in der Batch/Shell einfach iterieren, nur dann ist die Key-Value-Zuweisung nicht gerade sicher.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wegginho Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Okay so langsam kommen wir der Lösung näher. Habe mich jetzt grade mit einem Kollegen darüber unterhalten ob das okay ist/wäre. Das geht schon in die Richtung. Wir wollen nur unter Windows und AIX eine shell quasi aufsetzen, über die ein Batch-Programm läuft, dass abhängig von gesetzten Variablen noch andere Variablen hinzufügt. Die komplette Umgebung wird nach der Batch datei mit System.getenv() einmal zwischengespeichert und dann in ein script geschrieben, dass später auch ohne mein Java-Tool funktioniert. Also um das ganze nochmal zu erläutern. gewünscht wäre: [1] ich starte das Java programm [B][2] das Java Programm setzt das Environment [3] eine Batch Datei wird gestartet, die das Environment anreichert [4] das Java Programm ließt alle Variablen aus[/B] [5] die shell wird geschlossen [6] das Java Programm startet eine selbst erzeugte Datei .... Bei 2-4 liegt also der Hase begraben. Ich habe bisher halt schon so einiges ausprobiert. Ich möchte auch kein fertig ausprogrammiertes Ding hier haben, sondern nur den Ansatz, bzw. die Denkweise verstehen die man dafür braucht. mfg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wegginho Geschrieben 20. August 2009 Autor Teilen Geschrieben 20. August 2009 Also die Lösung war eigentlich ganz einfach. Mit einem ProcessBuilder einen Prozess erzeugen, per Map env= ProcessBuilder.environment() das Environment rausziehen, env.put mit den Environmentvariablen reinsetzen. Dann einen OutputStream (zum schreiben) und einen InputStream (zum lesen) auf die Konsole binden, per output die Befehle an die Konsole schicken und zack alles funktioniert. Hab dazu noch nen anderes Problem, aber da mach ich doch glatt nen neuen Thread auf, weil das fast n anderes Thema ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.