Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Systemvariable PATH ändern (https://www.delphipraxis.net/98528-systemvariable-path-aendern.html)

kuba 28. Aug 2007 17:14


Systemvariable PATH ändern
 
Hallo,

ich möchte eine Installationsroutine schreiben, dabei muss die Systemvariable PATH geändert werden.
Das funktioniert schon, jetzt benötige ich jedoch noch den "Deinstallationscode" um die Variable wieder zu entfernen, im PATH steht die Variable jetzt "mitten drin", wie kann ich meinen hinzugefügten Pfad wieder entfernen ?

KUBA

Code zum ändern:

Delphi-Quellcode:
procedure ReadEnviron (var PW: String);
Var
  Registry: tRegistry;
Begin
  Registry := tRegistry.Create;
  Try
    Registry.RootKey := HKEY_LOCAL_MACHINE;
    Registry.OpenKey ('\SYSTEM\CurrentControlSet\Control\Session Manager\Environment', False);
    PW := Registry.ReadString ('Path');
    Registry.CloseKey;
  Finally
    Registry.Free;
  End;
End;

 

procedure SetEnviron;
var registrierung:TRegistry; //uses registry nicht vergessen
    PW          :string;
  begin
      begin
      Registrierung:=Tregistry.Create;
      Registrierung.Rootkey:=HKEY_LOCAL_MACHINE;
      try
         Registrierung.OPENKEY('\SYSTEM\CurrentControlSet\Control\Session Manager\Environment',true);
      except
         Registrierung.CreateKey('\SYSTEM\CurrentControlSet\Control\Session Manager\Environment');
      end;
      ReadEnviron(PW);
      PW := PW + (';c:\test');
      showmessage(PW);
      Registrierung.WriteString('Path', PW);
      Registrierung.free;
      end;
end;

Binärbaum 29. Aug 2007 01:20

Re: Systemvariable PATH ändern
 
Zitat:

Zitat von kuba
Hallo,

ich möchte eine Installationsroutine schreiben, dabei muss die Systemvariable PATH geändert werden.
Das funktioniert schon, jetzt benötige ich jedoch noch den "Deinstallationscode" um die Variable wieder zu entfernen, im PATH steht die Variable jetzt "mitten drin", wie kann ich meinen hinzugefügten Pfad wieder entfernen ?

KUBA

Zunächst liest du den Pfad wieder wie oben aus. Danach kannst du mit der Funktion pos() ermitteln, an welcher Stelle in der PATH-Variable der Pfad zu deinem Programm steht. Mit copy() kann man dann aus dem String den Teil vor dieser Stelle und den Teil danach herausfischen, und schließlich muss man diese beiden nur noch zusammenfügen und den so erhaltenen Wert wieder in die Registry schreiben.

Ach ja, was mir noch auffällt: deine Prozedur SetEnviron kann man noch ein wenig verbessern (schneller und ressourcenschonender machen), indem man ein paar Zeilen ändert/austauscht:
Delphi-Quellcode:
procedure SetEnviron;
var registrierung:TRegistry; //uses registry nicht vergessen
    PW          :string;
  begin
      begin
      Registrierung:=Tregistry.Create;
      Registrierung.Rootkey:=HKEY_LOCAL_MACHINE;
      Registrierung.OpenKey('\SYSTEM\CurrentControlSet\Control\Session Manager\Environment',true);
      PW := Registrierung.ReadString ('Path');
      PW := PW + (';c:\test');
      showmessage(PW);
      Registrierung.WriteString('Path', PW);
      Registrierung.free;
      end;
end;
Da du bei OpenKey als zweiten Parameter true übergibst, wird der Schlüssel automatisch erzeugt, falls er nicht schon existiert. Damit kann man sich den separaten Aufruf von CreateKey sparen. Jedoch solltest du vielleicht noch den Rückgabewert von OpenKey überprüfen. Ist dieser True, dann konnte der Schlüssel geöffnet bzw. erstellt werden. Wenn der Rückgabewert False ist, konnte der Schlüssel nicht geöffnet werden.


MfG
Binärbaum

Phistev 29. Aug 2007 04:15

Re: Systemvariable PATH ändern
 
Statt pos() und copy() kannst du auch AnsiReplaceStr bzw. AnsiReplaceText(alter_wert, ';c:\test', '') nehmen.

kuba 29. Aug 2007 20:32

Re: Systemvariable PATH ändern
 
vielen Dank !! :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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