![]() |
Path aktualisieren nach Update
Hallo alle zusammen,
nachdem ich die Environmentvariable "Path" unter Windows XP geändert habe und der Umgebung mit
Delphi-Quellcode:
mitgeteilt habe, wird der neue Pfad nicht aktiv. Es muß aber gehen, da Windows selber den Pfad zu Laufzeit aktualisieren kann.
SetEnvironmentVariable(PChar(Name), PChar(Value));
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment'))); Hat jemand eine Idee? |
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.
|
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 |
Moin Duffy,
Zitat:
|
Moin Duffy,
Zitat:
|
Ausgerechnet das Programm "net". Hast du denn ein NT-basierendes System? Bei mir liegt das nämlich von Hause aus im Suchpfad (Windows2000).
|
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 |
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. |
Hallo Christian Seehase,
auch den setze ich!
Delphi-Quellcode:
Noch eine Idee?
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; bye |
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] |
Hallo Christian Seehase,
Du hast Recht gehabt, es funktioniert jetzt, also nochmal vielen Dank. Da kommen nicht viele drauf. Hut ab. bye |
Moin Duffy,
danke für die Blumen :oops: ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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