![]() |
Problem mit SetEnvironmentVariable
Ich möchte eine kleines Konsolen-Tool schreiben, das einen String als eingabe aufnimmt und in eine (System)Variable schreibt, so dass in einer Batch-Datei weiterhin darauf zugegriffen werden kann. Bis zum Einlesen des Strings funktioniert alles wie es soll (3te Zeile von unten). Ich bin mir nicht sicher ob SetEnvironmentVariable da die richtige Funktion ist, aber vielleicht hab ich ja auch nur einen anderen Denkfehler drin.
Delphi-Quellcode:
program input;
{$APPTYPE CONSOLE} uses SysUtils,windows; var i: integer; st: string; begin if ((paramstr(1)='/?') or (paramstr(1)='-?')) then begin writeln('INPUT [/?] [<Text>]'); writeln; writeln(' /? - Zeigt diesen Hilfetext an.'); writeln(' <Text> - Dieser Text wird vor der Eingabezeile angezeigt.'); exit; end else if paramstr(1) <> '' then begin for i := 1 to paramcount do begin if i > 1 then st := st + ' '; st := st + paramstr(i); end; writeln(st); end; readln(st); SetEnvironmentVariable('input',pchar(st)); end. |
Re: Problem mit SetEnvironmentVariable
Moin Cruiser,
das Problem an der Sache ist folgendes: Wenn aus einer Konsole heraus ein Programm gestartet wird, so erbt es in der Regel das Environment des Aufrufers, also das der Konsole, und arbeitet mit einer Kopie dieses Environments. Wird das Programm dann geschlossen, so sind auch alle Änderungen an den Umgebungsvariablen hinfällig. Es bringt auch leider nichts die Werte direkt in die Registry zu schreiben, da diese erst nach den Start einer neuen Konsole ziehen. Eine Broadcast Message an alle Toplevel Fenster, dass sich etwas im Enviroment geändert hat bringt leider auch nichts, da die Konsolen diese nicht verarbeiten. Der Workaround den Microsoft dazu vorschlägt ist dann auch der auf den man wohl noch selber kommen würde: Das Programm das Umgebungsvariablen setzen soll, die dann im weiteren Verlauf des Batches benögtigt werden, erzeugt eine Batchdatei mit festgelegtem Namen, und den entsprechenden Set-Zeilen zum Setzen der Variablenwerte. Nach dem Aufruf des Programmes muss dann noch der Aufruf eben dieser, durch das Programm erst erzeugten, Batchdatei folgen, damit weitere Programme auf die Werte der Variablen zugreifen können. Meine Idee dazu, die ich allerdings bislang nicht weiter verfolgt habe: Man müsste das Environment des Parentprozesses manipulieren, um den Workaround vermeiden zu können. |
Re: Problem mit SetEnvironmentVariable
puha... eine festgelegte Batch wollt ich eigentlich vermeiden, es ging mir eher um die Sache an sich. Und das Environment des Parentproc ändern... naja...
ich hab in der SDK-Hilfe was gefunden... aber C zu lesen ist nich so mein Ding... ich versuch mal den Workaround |
Re: Problem mit SetEnvironmentVariable
Damit...
Delphi-Quellcode:
und damit...
{...}
readln(st); sl := TStringList.Create; sl.Add('@set input='+st); sl.SaveToFile('i.bat'); sl.Free; end. Zitat:
|
Re: Problem mit SetEnvironmentVariable
Moin Cruiser,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz