Also wie man bspw. bei CreateProcess eine modifizierte Version der Umgebung uebergibt, hatte ich schonmal vor Jahren hier in der
DP gepostet.
Zitat von
himitsu:
Kenn ich schon, nur müßte ich ja dann woanders die aktuellen Umgebungsvariablen herbekommen.
Also den Befehl zum Ändern hätt ich ja schon gehabt, aber eine "gute" Vorgehensweise wäre da noch wissenswert.
Mir erscheint es sinnvoll, wenn du mal verraetst, was du erreichen willst/
Zitat von
himitsu:
OK, selber die nötigen Registry-Pfade abfragen ... aber sind das alle und wie wird da bei gleichen Variablen in den verschiedenen Zweigen vorgegangen?
HKEY_CURRENT_USER\Environment
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Session Manager\Environment
Ja das sind alle. Soweit ich weiss ueberschreiben deine Variablen die Systemvariablen (also bzgl. der Reihenfolge).
Zitat von
himitsu:
Hab es auch schon mit FreeEnvironmentStrings versucht, dachte daß da vielleicht die Kopie im Programm freigegeben wird und dann bei erneuter Abfrage mit GetEnvironmentStrings/GetEnvironmentVariable würde eventuell eine neue Kopie angelegt ... ging aber och nicht.
Nur beim Neustart eines Programms und Uebergabe der Umgebung.
Zitat von
himitsu:
In dem Programm wo ich dieses mal mit einbauen wöllte hätt ich dann nur noch ein "Problem" ... wie verwalte ich dann die programminternen mit SetEnvironmentVariable hinzugefügten Variablen, damit die dann beim erneuern des Enviromentblocks nicht verschwinden.
Die Frage verstehe ich nicht. Lokal ueberschreibt global. Wo ist der Konflikt?
Zitat von
himitsu:
Ich möchte ja schließlich Funktionen wie ExpandEnvironmentStrings auch noch programminterne Variablen unterjubeln können.
Hast du es mal getestet? Sollte doch gehen, denn eigentlich sollte das auf dem Environment-Block des Prozesses basieren.
Zitat von
himitsu:
Und das Programm neuzustarten ist ja mitten im Betrieb auch nicht unbedingt soooo optimal/schön.
SetEnvironmentVariable hilft doch dann. Und die Aenderung wird auch an Kindprozesse weitergegeben.
Zitat von
Christian Seehase:
reicht es Dir die Umgebungsvariable im Parent-Prozess zu setzen, so dass Du sie aus einem eigenen Konsolenprogramm heraus für die aufrufende Konsole setzen kannst?
Geht ja auch ohne Konsole, dann eben programmatisch.