Autor Beitrag
bbcudo
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 05.02.03 23:17 
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.

ausblenden 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 user profile iconTino: Quote- & Code-Tags hinzugefügt.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 05.02.03 23:40 
So schwer ist das aber nicht.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
SetEnvironmentVariable('MeineVariable', 'MeinWert');

-------------
Name := 'MeineVariable';
Value := 'Mein Wert';
SetEnvironmentVariable(PChar(Name), PChar(Value));

_________________
Ist Zeit wirklich Geld?
bbcudo Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 05.02.03 23:58 
Ok, so weit habe ich es dann auch geschafft, das Problem ist das es nicht geht. Beispiel:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?
bbcudo Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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