Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Registry Key löschen (https://www.delphipraxis.net/97921-registry-key-loeschen.html)

Tommy1988 18. Aug 2007 21:29


Registry Key löschen
 
Folgendes habe ich geschrieben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
registry : TRegistry;
begin
registry := TRegistry.Create;
 try
   registry.RootKey := HKEY_CURRENT_USER;
    if registry.OpenKey('\Software\Microsoft\Windows\'
      +'CurrentVersion\Explorer\TrayNotify', True) then
      begin
        registry.DeleteKey('IconStreams');
        registry.DeleteKey('PastIcon-Streams');
        registry.CloseKey;
      end else
        begin
         ShowMessage('Fehler, Schlüssel existieren nicht');
        end;
   finally
     registry.Free;
   end;
end;
Normalerweise sollte dadurch die Objektliste (die ganzen Tray's) gelöscht werden..
Also die History davon, nicht direkt die neben der Uhr.

Wieso klappt das mit dem löschen nicht?

Matze 18. Aug 2007 21:32

Re: Registry Key löschen
 
Hi,

der Parameter von OpenKey() darf am Anfang keinen Backslash haben, soweit ich weiß. Entferne diesen daher mal.
Geht das dann immer noch nicht, schau mal, was SysErrorMessage(GetLastError) zurückliefert.

Tommy1988 18. Aug 2007 21:36

Re: Registry Key löschen
 
Erm. also das ist sehr komisch. Backslash weg, geht noch immer net.

Fehlermeldung von SysErrorMessage(GetLastError):

"Zugriff verweigert"

Ich glaube es ist so, dass ich geöffnete Keys nicht löschen kann.

Aber wie funktioniert es denn dann mit der Windows eigenen Funktion ?

Luckie 18. Aug 2007 21:48

Re: Registry Key löschen
 
Zitat:

Zitat von Tommy1988
Ich glaube es ist so, dass ich geöffnete Keys nicht löschen kann.

Aber wie funktioniert es denn dann mit der Windows eigenen Funktion ?

In dem Windows ihn vorher nicht öffnet?

semo 18. Aug 2007 22:23

Re: Registry Key löschen
 
was bezweckst du denn mit diesem vorhaben und welche windows eigene funktion meinst du?

Rakshasa 18. Aug 2007 23:01

Re: Registry Key löschen
 
Also das mit dem Backslash ist richtig so, hast Du mal mit KeyExists() geschaut, ob er die Schlüssel überhaupt findet? Ansonsten würde ich auf ein Berechtigungs-Problem tippen. Müsstest mal posten, welche Windows-Version Du hast, ob der USer Admin ist usw.

Luckie 18. Aug 2007 23:07

Re: Registry Key löschen
 
In dem Schlüssel hat man eigentlich auch als beschränkter Benutzer Lese- und Schreibrechte. Man sollte ihn also auch löschen können.

Olli 18. Aug 2007 23:25

Re: Registry Key löschen
 
TRegistry is berühmt für das Problem (habe BDS 2006 im Moment nicht mehr hier, daher kann ich leider nichtmal sagen ob es da behoben worden war), daß es KEY_ALL_ACCESS anfordert. Dumme Sache das. Wenn ich nur lesen will, sollte ich auch nur genau diesen Zugriff anfordern. Ich vermute mal ganz frech, daß das das Problem ist.

Rakshasa 18. Aug 2007 23:39

Re: Registry Key löschen
 
Aber wenn er DeleteKey() aufruft, dann ist KEY_ALL_ACCESS schon richtig, da er ja nicht nur lesen will?

Olli 18. Aug 2007 23:56

Re: Registry Key löschen
 
Zitat:

The valid access rights for registry keys include the DELETE, READ_CONTROL, WRITE_DAC, and WRITE_OWNER standard access rights. Registry keys do not support the SYNCHRONIZE standard access right.
Wenn dann immernoch Fehler 5 kommt, wird das schon seine Gründe haben (die man im Übrigen mit REGEDT32 - auf Windows 2000 - und REGEDIT - Nachfolgeversionen - auch händisch überprüfen kann, falls der Schlüssel mal seine Berechtigungen nicht einfach nur vererbt bekommen sollte - wie es meist der Fall ist).

Und ja, mit KEY_ALL_ACCESS hat man selbstverfreilich auch DELETE-Zugriff, aber umgekehrt ist eben nicht der Fall. Und der Zugriff wird aufgrund des insgesamt angeforderten Zugriffs erlaubt oder verweigert. Also alles im grünen Bereich ;)

Luckie 19. Aug 2007 01:39

Re: Registry Key löschen
 
Zitat:

Zitat von Olli
TRegistry is berühmt für das Problem (habe BDS 2006 im Moment nicht mehr hier, daher kann ich leider nichtmal sagen ob es da behoben worden war

Meines Wissens nicht. TRegistry.Create ohne Parameter öffnet die Registry immer noch mit KEY_ALL_ACCESS.

Olli 19. Aug 2007 02:16

Re: Registry Key löschen
 
Dann hätten wir sogar noch die Bestätigung. Schade, daß man nicht die Fähigkeit von Delphi 4 (eingeführt mit dieser Version, wenn ich mich recht entsinne) nutzt, und den Kontruktor mit einem Defaultwert ausstattet, der "überschrieben" werden kann.

Luckie 19. Aug 2007 02:23

Re: Registry Key löschen
 
Das ist doch so. Gibts du keinen Parameter an, wird als Default KEY_ALL_ACCESS genommen. Du kannst aber auch selber den gewünschten Parameter angeben. Ich wünschte mir nur, dass der Default Parameter KEY_READ wäre und man explizit mehr Rechte anfordern müsste. Das Prinzip hat auch irgend einen Namen. Irgendwas mit "running" und "least privileges". Also man sollte immer nur mit so viel Privilegien / Rechten arbeiten, wie unbedingt nötig.

Christian Seehase 19. Aug 2007 02:29

Re: Registry Key löschen
 
Moin Michael,

das Problem wäre bei so einer Änderung aber, dass man dann alle alten Sourcen entsprechend anpassen müsste, und wer immer TRegistry statt der API-Funktionen genutzt hat, wird an das nach unten korrigieren der Rechte gewöhnt sein.

Luckie 19. Aug 2007 02:37

Re: Registry Key löschen
 
Jupp, jetzt ist das Kind natürlich schon in den Brunnen gefallen. :?

Tommy1988 19. Aug 2007 11:20

Re: Registry Key löschen
 
Zitat:

Jupp, jetzt ist das Kind natürlich schon in den Brunnen gefallen. Confused
Verstehe ich nicht :idea:

SirThornberry 19. Aug 2007 12:18

Re: Registry Key löschen
 
Zitat:

Zitat von Tommy1988
Erm. also das ist sehr komisch. Backslash weg, geht noch immer net.

Fehlermeldung von SysErrorMessage(GetLastError):

"Zugriff verweigert"

Ich glaube es ist so, dass ich geöffnete Keys nicht löschen kann.

Aber wie funktioniert es denn dann mit der Windows eigenen Funktion ?

Warum öffnest du überhaupt den Key wenn du ihn löschen willst? schließe ihn doch einfach vorher wieder.
Ich hatte bisher noch keine Probleme in meinen Programmen einen Registry-Key zu löschen.

Luckie 19. Aug 2007 19:29

Re: Registry Key löschen
 
Zitat:

Zitat von Tommy1988
Zitat:

Jupp, jetzt ist das Kind natürlich schon in den Brunnen gefallen. Confused
Verstehe ich nicht :idea:

Les dir den Beiträge von mir und Christian durch, darauf beziehe ich mich in diesem Beitrag.


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