Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Env.-Variable un. Vista setzen für Batchscript klappt nicht (https://www.delphipraxis.net/134543-env-variable-un-vista-setzen-fuer-batchscript-klappt-nicht.html)

turboPASCAL 24. Mai 2009 15:22


Env.-Variable un. Vista setzen für Batchscript klappt nicht
 
Environment Variable unter Vista setzen für Batchscript klappt nicht so recht.

Mit folgendem Versuch bekomme ich die Environment Variable mit SET nicht angezeigt:

Das Delphiconsolenprogramm SetEnvVar:
Delphi-Quellcode:
program SetEnvVar;

{$APPTYPE CONSOLE}

uses
  Windows;

function its(i: integer): string;
begin
  str(i, Result);
end;

function GetEnvVariable(Value: string): string;
var p: array [0..MAX_PATH] of Char;
begin
  GetEnvironmentVariable( PCHAR(Value), p, length(p) );
  result := p;
end;

BEGIN
  SetEnvironmentVariable( PCHAR( ParamStr(1) ), PCHAR( its(123) ) );
  Writeln(' -> SET ', ParamStr(1), ' = ', GetEnvVariable(ParamStr(1)));
END.
Die Aufrufende Batchdatei namens Test.cmd:
Code:
@ECHO OFF
SetEnvVar TestMy
ECHO "%Test"
Die Commandlineausgabe nach dem Aufruf der Test.cmd
Code:
C:\turboPASCAL\>test.cmd
 -> SET TestMy = 123
""

C:\turboPASCAL\>

sx2008 24. Mai 2009 15:41

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
Die Env-Variable existiert IMHO nur in dem Prozess, in dem du sie erzeugt hast und in allen Kindprozessen.
In deinem Fall ist aber cmd.exe der Vater und SetEnvVar.exe das Kind.

turboPASCAL 24. Mai 2009 15:56

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
Ja, so ist es anscheind.
Wie bekommt man also von Delphi eine Env.-Variable zur Commandline ? :gruebel:

jaenicke 24. Mai 2009 16:06

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
Du könntest höchstens die Umgebungsvariable global setzen, ich glaube ein Tool, das ich zum Anmelden an einem Samba Server kenne, macht das ebenso.

sx2008 24. Mai 2009 16:21

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
nicht so einfach...
Ein Kindprozess kann den Enviromentblock des Vaterprozesses verändern, aber das geht schon in Richtung hacken.

Man müsste die Env-Variable in der Batchdatei setzen...
Ungetestet:
Code:
FOR /F %%v IN (`DeinProgramm.exe`) DO SET Test=%%v
DeinProgramm.exe wird aufgerufen und für jede Zeile der Ausgabe wird der SET-Befehl ausgeführt.
Delphi-Quellcode:
programm DeinProgramm
{$APPTYPE CONSOLE}
begin
  writeln('der Wert');
end.
Ich weiss nicht, ob das mit dem FOR-Befehl nicht schon zu kompliziert ist und ob es einen einfacheren Weg gibt,
aber der direkte Ansatz:
Code:
SET Test= DeinProgramm.exe
würde so nicht funktionieren.

jaenicke 24. Mai 2009 16:43

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
Wenn es nur darum geht, Informationen an dein Batchskript zu übergeben, könntest du auch eine temporäre Datei benutzen und aus der Batchdatei auslesen.

Was hast du eigentlich vor?

himitsu 24. Mai 2009 16:48

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
such mal hier nach "Ändern der Environmentvariablen" oder so

gab's schonmal ein/zwei Themen dazu, wo s darum geht die Umgebungsvariablen von anderen (laufenden) Prozessen zu ändern.


Fazit: es ist praktisch unmöglich

Grund: den Environmentblock kann man zwar ändern, aber viele Programme lesen diesen Block nur beim Programmstart aus und arbeiten dann nur noch mit privaten lokalen Kopieen, an welche du praktisch nicht rankommst.

Mein Thread damals ging (glaub ich) auch darum, daß ich eine Environmentvariable in einem Programm ändern wollte, welche mein Programm gestartet hatte.



sx2008 sagte den Hauptgrund auch schon:
Jeder Prozess hat seinen eigenen Environmentblock und wenn er ein anderes Programm startet, dann gibt es dem anderen Prozess eine Kopie seines Blocks weiter.

Es gibbt zwar irgendeine Windows-Nachricht, welche eigentlich ein neuladen des Blocks veranlaßt, aber nahezu kein Programm reagiert darauf. (abgesehn von der Explorer.exe und Co. ... und da sage mal einer MS würde schlecht Programmieren :thumb: )

turboPASCAL 24. Mai 2009 17:04

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
@sx2008, Das habe ich schon versucht ohne Erfolg.

@jaenicke, Ist eine Möglichkeit.
Ein guter Programierer versucht aber Festplattenkratzereien zu vermeiden. :mrgreen:

@himitsu, habe noch nx finden können.
Zitat:

Fazit: es ist praktisch unmöglich
Das ist dumm.

jaenicke 24. Mai 2009 17:12

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
Die Frage ist doch: Was machst du mit der Batchdatei, was du nicht viel einfacher in Delphi machen kannst, wenn du eh schon ein Tool bastelst?

DeddyH 24. Mai 2009 17:13

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
 
Microsoft selbst sagt dazu:
Zitat:

Altering the environment variables of a child process during process creation is the only way one process can directly change the environment variables of another process. A process can never directly change the environment variables of another process that is not a child of that process.
Quelle: http://msdn.microsoft.com/en-us/libr...09(VS.85).aspx


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.
Seite 1 von 2  1 2      

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