AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Umgebungsvariablen langfristig setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Umgebungsvariablen langfristig setzen

Ein Thema von geisi · begonnen am 30. Mär 2007 · letzter Beitrag vom 11. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#1

Umgebungsvariablen langfristig setzen

  Alt 30. Mär 2007, 14:26
wenn ich in der command zeile (Eingabeaufforderung) eine Umgebungsvariable setze z.B. "set test=hallo" kann ich die variable mit "echo %test%" wieder abfragen. wenn ich aber die eingabeaufforderung schließe und gleich wieder neu öffne, und "echo %test%" eingebe, dann ist die variable nicht mehr gesetzt.

wie kann ich eine umgebungsvariable langfristig (zu mindestens bis zum nächsten shutdown) setzen?
mfg geisi
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Umgebungsvariablen langfristig setzen

  Alt 30. Mär 2007, 14:30
Hallo,

über die Seite "Erweitert" der Arbeitsplatz-Eigenschaften kannst du die Umgebungsvariablen des Master Environment setzen.

Grüße vom marabu
  Mit Zitat antworten Zitat
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#3

Re: Umgebungsvariablen langfristig setzen

  Alt 30. Mär 2007, 14:37
ich das dynamisch machen, drum brauche ich einen dos-befehl
mfg geisi
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Umgebungsvariablen langfristig setzen

  Alt 30. Mär 2007, 14:48
Dann musst du das Programm SETX verwenden. Suche auf deinem Installationsmedium im Ordner Support\Tools.

Schönes Wochenende
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Umgebungsvariablen langfristig setzen

  Alt 5. Apr 2007, 11:38
Wie kann man das eigentlich selber machen?

Der nötigen Eintrag in HKEY_CURRENT_USER\Environment (Benutzervariablen), oder HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Session Manager\Environment (Systemvariablen) läßt sich ja leicht erstellen, nur ist der Wert nicht sofort verfügbar.

PC neustarten, oder Arbeitsplatz-Eigenschaften > Umgebungsvariablen öffnen und dort erneut speichern.

MSDN-Library durchsuchenSetEnvironmentVariable sollte wohl auch nicht helfen, da:
Zitat von msdn:
Remarks
This function has no effect on the system environment variables or the environment variables of other processes.
> http://msdn2.microsoft.com/en-us/library/ms686206.aspx

Es steht zwar geschrieben, daß man WM_SETTINGCHANGE mit dem String "Environment" versenden soll, aber wohin, wenn kein Fenster im Programm existiert?
> Konsolenanwendung

so geht's jedenfalls nicht:
Code:
SendMessage([color=#ff0000][b]0[/b][/color], WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Umgebungsvariablen langfristig setzen

  Alt 5. Apr 2007, 12:12
Moin Himitsu,

Zitat von himitsu:
Es steht zwar geschrieben, daß man WM_SETTINGCHANGE mit dem String "Environment" versenden soll, aber wohin, wenn kein Fenster im Programm existiert?
> Konsolenanwendung
für solche Messages kann man HWND_BROADCAST als Handle nehmen.
(am Besten dann auch mit SendMessageTimeout, wie in der Dokumentation zu MSDN-Library durchsuchenWM_SETTINGCHANGE beschrieben)
Das hilft bei einer Konsole natürlich auch nicht.

Das Problem ist damit dann aber leider nicht gelöst, da die Message dann ja auch noch verarbeitet werden müsste, sprich, die Anwendung muss dann noch eigene Environment aktualisieren, was, IMHO, kaum eine Anwendung tut, oder das OS müsste das Environment aller laufenden Prozesse aktualisieren.
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 himitsu
himitsu
Online

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

Re: Umgebungsvariablen langfristig setzen

  Alt 5. Apr 2007, 12:31
Das mit dem aktualisieren in DER Anwendung wär eh egal ... die initialisiert nur ein paar Werte in der Registry und beendet sich dann wieder.

Nur brauch ich halt den Wert dann auch gleich nach dem Programmaufruf.

'ne Batchfile ruft anfangs dat Programm auf und wenn noch nicht vorhanden, wird von diesem die Umgebungsvariable installiert, wo der Programmpfad für die weitere installation und den späteren Betrieb drinsteht (brauch halt was, womit auch die anderen Batchfiles mit klarkommen).


Dank' erstmal für das HWND_BROADCAST ... jetzt wird zumindestens Windows schonmal aktualisiert.

Hab's jetzt mal so versucht, aber die Variable is immernoch nicht in der Batchfile verfügbar. ;(
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')), SMTO_BLOCK, 15000, W); 's könnte aber och sein, das CMD die Werte noch nicht hat?
Denn wenn ich danach die Batchfile erneut starte, dann ist der Wert plötzlich vorhanden.


[add]
ich wollt's eigentlich so machen:
(InitializeDefaultDir.exe installiert eventuell die Enviromentvariable)
Code:
@ECHO OFF

ECHO.
ECHO.
ECHO * initialize %%FNSEntProcDir%%

..\InitializeDefaultDir.exe
IF ERRORLEVEL 0   GOTO init

InitializeDefaultDir.exe
IF ERRORLEVEL 0   GOTO init

IF "*%FNSEntProcDir%"=="*" (
  ECHO.
  ECHO the required programm-directoy can't installed
  PAUSE
  GOTO exit
)

:init
ECHO.
ECHO.
ECHO * intall registry values
reg.exe IMPORT RegInstEx.reg
IF ERRORLEVEL 1 (
  PAUSE
  GOTO exit
)

IF "*%FNSEntProcDir%"=="*" (
  ECHO.
  ECHO %%FNSEntProcDir%% not definied
  PAUSE
  GOTO exit
)

ECHO.
ECHO.
ECHO * copy programm files
MD "%FNSEntProcDir%\FileSplitter"
COPY *.cmd "%FNSEntProcDir%\FileSplitter\"
COPY *.reg "%FNSEntProcDir%\FileSplitter\"
COPY *.exe "%FNSEntProcDir%\FileSplitter\"

:exit
Aber anscheinend muß ich dann die Batchfile mehrmals vom Benutzer aufrufen lassen (beim 2. Mal gings ja), oder ihn notfalls zum vorherigen starten dieses Programms auffordern (falls die Variable noch nicht initialisiert wurde).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Umgebungsvariablen langfristig setzen

  Alt 10. Apr 2007, 15:32
So, ich hab's weiter versucht, aber im Moment geht das mit dem WM_SETTINGCHANGE garnicht mehr.

Unter Arbeitsplatzeigenschaften > Erweitert > Umgebungsvariablen > Benutzervariablen sieht man zwar die Änderung, jedoch kommt die nicht in CMD an ... nichtmal wenn man die Batchfile neu startet


Eigentlich wollte ich jetzt was Anderes schreiben, aber zum Glückt funktioniert es nun wieder.


Nur scheint wirklich kein Programm seine Kopie der Umgebungsvariablen zu aktualisieren.

Weder CMD (wo ich es eigentlich benötige) und nichtmal Delphi (7) ... denn ich hab vorhin leider gedacht ich gehe mal im Debuger mein Programm durch und schau ob alles läuft.
Tja und da ja jeder Prozess standardmäßig den Enviromentblock des Elternprozesses übernimmt und in meinem Programm nichts stimmte, wenn es im Debugger lief, stimmt es wohl schon bei seiner Mutter (Delphi) nicht.


@Chistian:
wie kann man eigentlich am Besten den Enviromentblock aktualisieren?
Hab da noch nichts zu gefunden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: Umgebungsvariablen langfristig setzen

  Alt 10. Apr 2007, 15:39
Betroffene Programme muessen danach neu gestartet werden. Eine Alternative ist, dass ein Programm selber solche "Umgebungsvariablen" verwaltet und nur an Prozesse weitergibt, welche es selber starte (bspw. VS macht das so).

Zitat von himitsu:
wie kann man eigentlich am Besten den Enviromentblock aktualisieren?
Hab da noch nichts zu gefunden.
MSDN-Library durchsuchenSetEnvironmentVariable
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Umgebungsvariablen langfristig setzen

  Alt 10. Apr 2007, 16:18
Kenn ich schon, nur müßte ich ja dann woanders die aktuellen Umgebungsvariablen herbekommen.
Also den Befehl zum Ändern hätt ich ja schon gehabt, aber eine "gute" Vorgehensweise wäre da noch wissenswert.

OK, selber die nötigen Registry-Pfade abfragen ... aber sind das alle und wie wird da bei gleichen Variablen in den verschiedenen Zweigen vorgegangen?
HKEY_CURRENT_USER\Environment
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Session Manager\Environment



Hab es auch schon mit FreeEnvironmentStrings versucht, dachte daß da vielleicht die Kopie im Programm freigegeben wird und dann bei erneuter Abfrage mit GetEnvironmentStrings/GetEnvironmentVariable würde eventuell eine neue Kopie angelegt ... ging aber och nicht.



In dem Programm wo ich dieses mal mit einbauen wöllte hätt ich dann nur noch ein "Problem" ... wie verwalte ich dann die programminternen mit SetEnvironmentVariable hinzugefügten Variablen, damit die dann beim erneuern des Enviromentblocks nicht verschwinden.

Werd' dann vermutlich wohl die ganzen Environment-Funktionen hooken müssen um mitzubekommen was nicht zu "löschen" ist.

Ich möchte ja schließlich Funktionen wie ExpandEnvironmentStrings auch noch programminterne Variablen unterjubeln können.


Und das Programm neuzustarten ist ja mitten im Betrieb auch nicht unbedingt soooo optimal/schön.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 16: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