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:
Die Aufrufende Batchdatei namens Test.cmd:
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.
Code:
Die Commandlineausgabe nach dem Aufruf der Test.cmd
@ECHO OFF
SetEnvVar TestMy ECHO "%Test"
Code:
C:\turboPASCAL\>test.cmd
-> SET TestMy = 123 "" C:\turboPASCAL\> |
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. |
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: |
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.
|
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:
DeinProgramm.exe wird aufgerufen und für jede Zeile der Ausgabe wird der SET-Befehl ausgeführt.
FOR /F %%v IN (`DeinProgramm.exe`) DO SET Test=%%v
Delphi-Quellcode:
Ich weiss nicht, ob das mit dem FOR-Befehl nicht schon zu kompliziert ist und ob es einen einfacheren Weg gibt,
programm DeinProgramm
{$APPTYPE CONSOLE} begin writeln('der Wert'); end. aber der direkte Ansatz:
Code:
würde so nicht funktionieren.
SET Test= DeinProgramm.exe
|
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? |
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: ) |
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:
|
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?
|
Re: Env.-Variable un. Vista setzen für Batchscript klappt ni
Microsoft selbst sagt dazu:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 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