AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Env.-Variable un. Vista setzen für Batchscript klappt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Env.-Variable un. Vista setzen für Batchscript klappt nicht

Ein Thema von turboPASCAL · begonnen am 24. Mai 2009 · letzter Beitrag vom 24. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

Env.-Variable un. Vista setzen für Batchscript klappt nicht

  Alt 24. Mai 2009, 16:22
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\>
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 16:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 16:56
Ja, so ist es anscheind.
Wie bekommt man also von Delphi eine Env.-Variable zur Commandline ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 17:06
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 17:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 17:43
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?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.053 Beiträge
 
Delphi 12 Athens
 
#7

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 17:48
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 )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 18:04
@sx2008, Das habe ich schon versucht ohne Erfolg.

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

@himitsu, habe noch nx finden können.
Zitat:
Fazit: es ist praktisch unmöglich
Das ist dumm.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 18:12
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?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#10

Re: Env.-Variable un. Vista setzen für Batchscript klappt ni

  Alt 24. Mai 2009, 18:13
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:43 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