AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit SetEnvironmentVariable
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit SetEnvironmentVariable

Ein Thema von cruiser · begonnen am 3. Mär 2004 · letzter Beitrag vom 4. Mär 2004
Antwort Antwort
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit SetEnvironmentVariable

  Alt 3. Mär 2004, 12:46
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.
Ronny Lüttke
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit SetEnvironmentVariable

  Alt 3. Mär 2004, 15:23
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit SetEnvironmentVariable

  Alt 3. Mär 2004, 23:10
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
Ronny Lüttke
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit SetEnvironmentVariable

  Alt 3. Mär 2004, 23:40
Damit...

Delphi-Quellcode:
{...}

  readln(st);
  sl := TStringList.Create;
  sl.Add('@set input='+st);
  sl.SaveToFile('i.bat');
  sl.Free;
end.
und damit...

Zitat:
@echo off
input Try it!
call i.bat
del i.bat
echo ______________
echo.
echo Try: %input%
set input=
geht es... für meinen Geschmack etwas dirty... aber wohl die schnellste Lösung
Ronny Lüttke
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Problem mit SetEnvironmentVariable

  Alt 4. Mär 2004, 18:53
Moin Cruiser,

Zitat von cruiser:
für meinen Geschmack etwas dirty... aber wohl die schnellste Lösung
und es ist die dokumentierte Lösung
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz