Autor Beitrag
Frankieboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Mi 13.02.08 13:48 
Hallo,

hab nochmal ne Frage:
Wie ändere oder erstelle ich neue Windows Environment Variable mit einem Delphi-Programm?

über die Windows-Konsole get es mit dem Befehl set:

"set" gibt alle Variablen und deren Werte in der Konsole aus.

"set BEISPIEL_VARIABLE=Test" erstellt eine neue Var BEISPIEL_VARIABLE und gibt ihr den Wert Test (oder ändert den Wert, falls die schon Variable existiert)

Habe versucht, die Variablen über eine ExecAndWait-Funktion zu erstellen (zu startendes Programm war 'set', und die übergebenen Parameter waren 'BEISPIEL_VARIABLE=Test'), ging aber nicht... Hat jemand ne Idee?


Thanks

Frankie
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 13.02.08 16:54 
Mit dem Befehl set sind die aber nicht systemweit, oder?
Wenn das auch gar nicht notwendig ist, gibt es die Befehle GetEnvironmentVariable und SetEnvironmentVariable.

Wenn die Variablen systemweit gelten sollen, dann hilft dieser Eintrag aus unserer Library weiter. Eine API-Funktion dafür steht zwar in einer API-Referenz von MS, ist aber nirgends zu finden gewesen. Deshalb dieser Weg:
www.delphi-library.d...tzenlesen_18588.html
Frankieboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Mi 13.02.08 17:38 
Danke für den Link auf das Topic, hab ich auch schon gefunden...

Ach ja:
1. die Umgebungsvariablen sollten systemweit sein
2. Umgebungsvariablen für den angemeldeten Nutzer reichen - glaube ich

Leider funktioniert die obige Lösung (mit der darin genannten procedure SetSystemWideEinvironmentVariable) bei mir nicht >:(

Wenn ich damit ne Variable erstelle, steht sie zwar in der Registry, wird aber scheinbar nicht wirklich sofort in den Speicher (wo sie eigentlich hinsollte!) geladen.
Das Ergebnis ist dann, dass neue Variablen nicht sofort angezeigt werden, bzw. geänderte Variablen noch den alten Wert haben.
Am schnellsten werden die Änderungen in die Liste bei System\Erweitert\Umgebungsvariablen übernommen, in der "set"-Liste am langsamsten... Da fehlt wohl noch n Update-befehl?

Es geht nämlich um das Batchen einer Zertifikaterstellung mit OpenSSL.
Und leider bleiben mir für die Übergebung einiger Eigenschaften an openssl.exe nur die Umgebungsvariablen!
Das alles ist in so fern wichtig, da die erzeugten Zertifikate wertlos sind, wenn sie nicht mit den richigen Daten aus den Umgebungsvariablen generiert werden!

Ich bin auf das Ganze sowieso erst gekommen, als ich ne *.bat-Datei gefunden habe, in der Umgebungsvariablen eben mit dem genannten "set"-Befehl gesetzt worden sind. Zur Not generier ich mit Delphi halt ne .bat Datei, die die nötigen Variablen enthält!
Auch die Suche nach der binären Form von set haben nichts gebracht, weder eine set.exe noch set.com irgendwo im Windows-Ordner, die ich mit Shellexecute starten könnte...

Wer in der Hinsicht noch was weiß,
melde sich bitte!

Danke und Grüße,

Frankie
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 13.02.08 17:46 
1. set ist ein interner Befehl, den du mit cmd.exe und dem Befehl als einer der Parameter starten musst.
2. Sofort übernommen wird das nicht, erst nach einem Neustart oder Ab- und Anmelden. Man kann zwar theoretisch Botschaften schicken, dass die Umgebungsvariablen geändert wurden, aber erfolgreich war ich damit nicht immer. Deshalb ist ein Neustart der sicherere Weg.