Entwickler-Ecke
Windows API - Wie in Konsolenanwendung eine Umgebungsvariable setzen?
bbcudo - Mi 05.02.03 23:17
Titel: Wie in Konsolenanwendung eine Umgebungsvariable setzen?
Hallo !
Ich möchte in meiner Konsolenanwendung Umgebungsvariablen setzen (genauso wie es der "set"-Befehl in einer Windows Eingabeaufforderung macht). Die Variable soll also nur in der aktuellen Shell/Prozess verfügbar sein. Ich habe in der Delphi Hilfe auch untenstehendes gefunden. Leider ist es mir nicht gelungen mit dieser Hilfe eine funktioniernde Prozedur zu erstellen. Liegt wohl daran das ich nicht so viel Erfahrung in D habe :nixweiss: . Wäre vielleicht jemand so nett mir eine Beispielprozedur zu erstellen ? :roll:
Vielen Dank, Gruß bbcudo
Zitat: |
"The SetEnvironmentVariable function sets the value of an environment variable for the current process.
Quelltext 1: 2: 3: 4:
| BOOL SetEnvironmentVariable( LPCTSTR lpName, // address of environment variable name LPCTSTR lpValue // address of new value for variable ); |
Parameters
lpName
Points to a null-terminated string that specifies the environment variable whose value is being set. The operating system creates the environment variable if it does not exist and lpValue is not NULL.
lpValue
Points to a null-terminated string containing the new value of the specified environment variable. If this parameter is NULL, the variable is deleted from the current process's environment.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError. " |
Moderiert von
Tino: Quote- & Code-Tags hinzugefügt.
AndyB - Mi 05.02.03 23:40
So schwer ist das aber nicht.
Quelltext
1: 2: 3: 4: 5: 6:
| SetEnvironmentVariable('MeineVariable', 'MeinWert');
------------- Name := 'MeineVariable'; Value := 'Mein Wert'; SetEnvironmentVariable(PChar(Name), PChar(Value)); |
bbcudo - Mi 05.02.03 23:58
Ok, so weit habe ich es dann auch geschafft, das Problem ist das es nicht geht. Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| uses SysUtils,windows;
var Name,Value :String;
begin Name:='myvar'; Value:='myValue'; if SetEnvironmentVariable(PChar(Name),PChar(Value)) then writeln('OK'); end. |
Aber wenn ich jetzt eine Eingabeaufforderung unter W2k aufmachen und mein Programm ausführe dann bekomme ich das "OK" zu sehen, aber wenn ich mir dann mit "set" die Variablen anzeigen lasse ist "myvar" nicht vorhaben :roll: Keine Ahnung woran es liegt ... Oder habe ich einen Denkfehler drin ?
Gruß, Udo
AndyB - Do 06.02.03 00:13
Zitat: |
Keine Ahnung woran es liegt ... Oder habe ich einen Denkfehler drin ? |
Wie du schon geschrieben hast:
Zitat: |
Die Variable soll also nur in der aktuellen Shell/Prozess verfügbar sein |
und wie es in der Win32SDK Hilfe steht:
Zitat: |
The SetEnvironmentVariable function sets the value of an environment variable for the current process |
Wenn du einen neuen Prozess startest, der nicht kein Kindprozess von deiner Anwendung ist, so gelten für diesen nicht die Umgebungsvariablen deines Programms.
bbcudo - Do 06.02.03 21:17
Also dann ist die Variable nur in den Prozessen vorhaden die das Delphiprogramm selbst startet.
Hm, gibt es nicht noch eine andere Möglichkeit ? Ich kann mir nicht vorstellen das es so schwer ist eine Umgebungsvariable zu setzen .... :?!?:
Gruß, Udo
Tino - Fr 07.02.03 10:31
Was denn nun? Entwender
bbcudo hat folgendes geschrieben: |
Die Variable soll also nur in der aktuellen Shell/Prozess verfügbar sein. |
oder
bbcudo hat folgendes geschrieben: |
Also dann ist die Variable nur in den Prozessen vorhaden die das Delphiprogramm selbst startet. Hm, gibt es nicht noch eine andere Möglichkeit ? Ich kann mir nicht vorstellen das es so schwer ist eine Umgebungsvariable zu setzen |
Gruß
TINO
bbcudo - Di 11.02.03 19:16
Tino hat folgendes geschrieben: |
Was denn nun? Entwender
bbcudo hat folgendes geschrieben: | Die Variable soll also nur in der aktuellen Shell/Prozess verfügbar sein. |
|
Sorry, habe mich da wohl undeutlich ausgedrückt. Kurz zusammengefasst:
Ich möchte mit eine Delphi-Programm das machen können, was der SET Befehl der NT/W2k/XP Kommandozeile macht. Er setzt Umgebungsvariablen, auf welche sofort zugegriffen werden kann. Ich arbeite aus bestimmten Gründen viel mit Batch-Skripten (*.cmd) und um darin mehr Funktionalitäten zu erhalten, nutze ich kleine Delphi-Programme. Die Werteübergabe ließe sich dabei am einfachsten über Umgebungsvariablen machen ....
Ich weis das man solche Rückgabewerte auch über Errorlevel machen kann, da ist man aber zu eingeschränkt. Errorlevel sind gut für Ja/Nein- Abfragen, aber nicht für die Rückgabe von Zahlen / Daten geeignet.
Da fällt mir gerade noch etwas ein kann ich vielleicht sogar den SET Befehl (CMD.exe) über ShellExecute aufrufen, oder geht das schief ?
Ich hoffe das sich da noch etwas findet, ich kann mir nicht vorstellen das das so schwer in Delphi ist ....
Danke schonmal,
Gruß, Udo
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!