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 Path aktualisieren nach Update (https://www.delphipraxis.net/5859-path-aktualisieren-nach-update.html)

Duffy 21. Jun 2003 14:32


Path aktualisieren nach Update
 
Hallo alle zusammen,
nachdem ich die Environmentvariable "Path" unter Windows XP geändert habe und der Umgebung mit
Delphi-Quellcode:
SetEnvironmentVariable(PChar(Name), PChar(Value));
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
mitgeteilt habe, wird der neue Pfad nicht aktiv. Es muß aber gehen, da Windows selber den Pfad zu Laufzeit aktualisieren kann.
Hat jemand eine Idee?

Luckie 21. Jun 2003 14:35

Du mußt dein Programm neu starten. Da ein Prozess die Umgebungsvariablen für sich nur beim Start einliest. ist übrigens bei der Windows Konsole nicht anders. Wenn ich da die PATH-Variable öndere, muß ich die aktuelle Konsole erst schließen und neu öffnen bevor es wirksam wird.

Duffy 21. Jun 2003 14:41

Hallo Luckie,
auch wenn ich die Anwendung schließe, bzw. eine neue Eingabeaufforderung aufmache. dann sehe ich die neue Path-Variable. Aber der komplette Path ist nicht mehr verfügbar. Wenn ich zum Beispeil "net" eingebe bekomme ich "Der Befehl "net" ist entweder falsch geschrieben oder konnte nicht gefunden werden."
Eine Idee woran das liegen könnte.
Achso, gehe ich unter Windows Systemsteuerung --> Umgebungsvariablen und aktualisiere ist alles Ok, sowie nach einem Neustart.
bye

Christian Seehase 21. Jun 2003 14:42

Moin Duffy,

Zitat:

Zitat von Duffy
Es muß aber gehen, da Windows selber den Pfad zu Laufzeit aktualisieren kann.

Ein Programm, dass die Message WM_SETTINGCHANGE nicht auswertet wird davon nur nichts mitbekommen.

Christian Seehase 21. Jun 2003 14:45

Moin Duffy,

Zitat:

Zitat von Duffy
dann sehe ich die neue Path-Variable. Aber der komplette Path ist nicht mehr verfügbar.

wenn Du die alte Path Variable überschreibst und nicht ergänzt ist das logisch. Wenn Du sie ergänzt hast allerdings nicht.

Luckie 21. Jun 2003 14:45

Ausgerechnet das Programm "net". Hast du denn ein NT-basierendes System? Bei mir liegt das nämlich von Hause aus im Suchpfad (Windows2000).

Duffy 21. Jun 2003 14:46

Hallo Christian Seehase,
das sollte mir eigentlich so ziemlich egal sein. Aber die Eingabeaufforderung (cmd) bekommt dies nach einem erneuten Aufruf auf jeden Fall mit. Dies funktioniert aber nach meinem aktualisieren nicht.
Eine Idee was es sein könnte?
bye

Christian Seehase 21. Jun 2003 14:51

Moin Duffy,

wenn Du die Umgebungsvariable mit SetEnvironmentVariable setzt kann das nicht funktionieren, da hiermit nicht der Wert in der Registry unter Environment geändert wird, sondern der Eintrag in dem Environment dass der Prozess beim starten geerbt hat.

Duffy 21. Jun 2003 14:55

Hallo Christian Seehase,
auch den setze ich!
Delphi-Quellcode:
function TMainForm.SetGlobalEnvironment(Name, Value: string; System: Boolean): Boolean;
const
  UserRegKey = '\Environment';
  SystemRegKey = '\SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  if System then
  begin
    with Registry do
    begin
      RootKey := HKEY_LOCAL_MACHINE;
      OpenKey(SystemRegKey, False);
    end;
  end
  else
  begin
    with Registry do
    begin
      RootKey := HKEY_CURRENT_USER;
      OpenKey(UserRegKey, False);
    end;
  end;
  try
    Registry.WriteString('Path', Value);
    SetEnvironmentVariable(PChar(Name), PChar(Value));
    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
    Result := True;
  finally
    Registry.Free;
  end;
end;
Noch eine Idee?
bye

Christian Seehase 21. Jun 2003 15:33

Moin Duffy,

ja, ich hab' 'ne Idee:

Du musst mit WriteExpandString schreiben, nicht mit WriteString, da der Wert Path vom Typ REG_EXPAND_SZ ist.
Wenn der Typ nicht stimmt (beim Schreiben mit WriteString wird daraus REG_SZ), kann Windows den Wert nicht auslesen, und erhält einen Leerstring zurück.

[EDIT]
Man muss grundsätzlich darauf achten, dass der Typ stimmt, nicht nur hier. Ansonsten kann das zu interessanten Effekten führen ;-)
[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Seite 1 von 2  1 2      

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