Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi SetEnvironmentVariable global? (https://www.delphipraxis.net/86376-setenvironmentvariable-global.html)

FriFra 13. Feb 2007 12:19


SetEnvironmentVariable global?
 
Gibt es eine Möglichkeit eine globale Systemvariable zu setzen?
SetEnvironmentVariable funktioniert ja leider nur für den aktuellen Prozess und ist daher für mich unbrauchbar.

marabu 13. Feb 2007 12:38

Re: SetEnvironmentVariable global?
 
Hallo,

wahrscheinlich gibt es eine "bessere" Lösung für dein Problem, aber weil du deinen Lösungsansatz bereits gewählt hast und ich dein Problem nicht erkenne: klick

Freundliche Grüße

Christian Seehase 13. Feb 2007 19:45

Re: SetEnvironmentVariable global?
 
Moin FriFra,

könntest Du bitte mal ein wenig präzisieren, wie die Zusammenhänge zwischen den beteiligten Prozessen sind.
Der Weg über HWND_BROADCAST und WM_WININICHANGE wie er auf der von marabu verlinkten Site gezeigt wird funktioniert nur dann, wenn die Anwendung, die die Message erhält, diese auch verarbeitet, was, IMHO, kaum eine tut.

marabu 13. Feb 2007 20:17

Re: SetEnvironmentVariable global?
 
Hallo Chris,

nur Programme, die das auch wirklich wollen, werten zur Laufzeit die Nachricht WM_SETTINGCHANGE (!) aus. Ich habe lange überlegt, wozu der OP das brauchen könnte. Als IPC Ersatzlösung lässt sich der Ansatz nicht wirklich positionieren. Was bleibt dann noch? Ein Utility, welches den windows-eigenen Dialog für Umgebungsvariablen nachbildet? Eher auch nicht. Vermutlich ist die Idee das Aufsetzen einer globalen Variable, damit ein später gestartetes Programm diese im eigenen environment block findet und auswerten kann. Dazu ist der Klimmzug nicht nötig, da man statt ShellExecute() auch CreateProcess() einsetzen und dort das Environment massgeschneidert bereit stellen könnte. Bin auch gespannt auf die Antwort auf deine Frage.

Freundliche Grüße

arbu man 13. Feb 2007 20:29

Re: SetEnvironmentVariable global?
 
Ein ähnliches Problem hat ich auch mal: http://www.delphipraxis.net/internal...t.php?t=101833

Vielleicht hilft es dir, mfg, Björn

Christian Seehase 13. Feb 2007 20:31

Re: SetEnvironmentVariable global?
 
Moin Marabu,

ich habe da eher den Verdacht, dass es darum geht, das ein in der Konsole gestartetes Programm eine Umgebungsvariable setzten soll, die dann, nach dessen Ende, verarbeitet wird.
Aber lassen wir uns mal überraschen.

FriFra 13. Feb 2007 23:32

Re: SetEnvironmentVariable global?
 
Ja, so ungefähr ;) ... Ein Programm soll eine Umgebungsvariable setzen und diese soll dann für alle nachfolgend gestarteten Anwendungen auslesbar sein. Für irgendwelche Klimmzüge mit der Registry habe ich keine Möglichkeit, da diese Variable von einem Account mit eingeschränkten Rechten gesetzt werden soll.

marabu 14. Feb 2007 06:18

Re: SetEnvironmentVariable global?
 
Guten Morgen,

Zitat:

Zitat von FriFra
... Ein Programm soll eine Umgebungsvariable setzen und diese soll dann für alle nachfolgend gestarteten Anwendungen auslesbar sein. ...

der Standardweg unter Windows wäre dann das aufsetzen eines speziellen Environment:

Delphi-Quellcode:
procedure TDemoForm.FormCreate(Sender: TObject);
var
  cmd, shell: string;
begin
  SetEnvironmentVariable('DPTEST', 'FRIFRA');
  shell := GetEnvironmentVariable('COMSPEC');
  cmd := '/K SET DPTEST';
  ShellExecute(0, '', PAnsiChar(shell), PAnsiChar(cmd), '', SW_SHOW);
  Release;
end;
Alle Programme, die jetzt gestartet werden, finden die Variable DPTEST.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz