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/150515-registry-key-loeschen.html)

DarkProtector 19. Apr 2010 17:15


Registry Key löschen
 
Hallo,

ich bin neu hier und wollte eben mal einen Registry Key löschen:
Delphi-Quellcode:
procedure TForm1.UnlockClick(Sender: TObject);

var reg:TRegistry;

begin
reg:=TRegistry.Create;
memo1.Lines.Text:=memo1.Lines.Text+'->Entferne Registry Schreibschutz';
try
   reg.RootKey:=HKEY_CURRENT_USER;
   reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', false);
   reg.DeleteKey('DisableRegistryTools');
   reg.CloseKey;
finally
   reg.Free;
   memo1.Lines.Text:=memo1.Lines.Text+'...Done'#13;
end;
Das habe ich bis jetzt, passieren tut nichts. Wäre nett wenn ihr mir helfen könnt :).

SirThornberry 19. Apr 2010 17:25

Re: Registry Key löschen
 
OpenKey und DeleteKey sind sicher Funktionen. Bei OpenKey bin ich mir ganz sicher. Werte am besten aus ob die Funktionsaufrufe auch erfolgreich waren. Wenn OpenKey fehlschlägt ist es arg fahrlässig ein DeleteKey aufzurufen. Denn mit etwas Pech existiert ein key gleichen Namens auch in der Ebene in der du dich vor OpenKey befindest und dann würde dort gelöscht werden.
Zudem bin ich mir auch nicht ganz sicher ob ein OpenKey überhaupt notwendig ist oder ob man bei DeleteKey nicht gleich den vollständigen Pfad angeben kann.

DarkProtector 19. Apr 2010 17:40

Re: Registry Key löschen
 
Ok habe nun meinen Quelltext etwas angepasst, funktionieren tut es trotzdem noch nicht.

Delphi-Quellcode:
procedure TForm1.UnlockClick(Sender: TObject);

var reg:TRegistry;

begin
reg:=TRegistry.Create;
memo1.Lines.Text:=memo1.Lines.Text+'->Entferne Registry Schreibschutz';
try
   reg.RootKey:=HKEY_CURRENT_USER;
   reg.DeleteKey('Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools');
   reg.CloseKey;
finally
   reg.Free;
   memo1.Lines.Text:=memo1.Lines.Text+'...Done'#13;
end;

SirThornberry 19. Apr 2010 17:42

Re: Registry Key löschen
 
Hast du denn in der Hilfe mal geschaut ob der absolute Pfad erlaubt ist? Den Rückgabewert der Funktionen prüfst du übrigens immer noch nicht. :wink: Wenn du deine ursprüngliche Variante mal probierst und dort die Rückgabewerte auswertest, findest du vielleicht auch raus ob der Pfad nicht gefunden wird oder wirklich nur das löschen fehl schlegt. Aber wie gesagt. Dafür sind Funktionen eben Funktionen - weil sie etwas zurück geben was man auswerten kann.

DarkProtector 19. Apr 2010 17:44

Re: Registry Key löschen
 
Danke schon mal schaue mir das ganze nochmal in eurer Datenbank an.

SirThornberry 19. Apr 2010 17:49

Re: Registry Key löschen
 
da gibt es eigentlich nicht viel anzusehen:
Delphi-Quellcode:
if openkey(...) then
begin
  [...]
end
else
  ShowMessage('Openkey ist fehlgeschlagen');

Rakshasa 19. Apr 2010 17:53

Re: Registry Key löschen
 
Du hast bei der Pfadangabe den Backslash "\" an erster Stelle vergessen:


Delphi-Quellcode:
// Müsste jetzt funktionieren...
reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\System', false);

DarkProtector 19. Apr 2010 17:58

Re: Registry Key löschen
 
Funktioniert leider immer noch nicht. Zur allgemeinen Information ich habe
Delphi-Quellcode:
Uses ...,Registry;
drin und alles mit Administrationsrechten ausgeführt.

Edit: So habe das ganze nun nochmal mit einer If-Struktur überarbeitet:
Delphi-Quellcode:
procedure TForm1.UnlockClick(Sender: TObject);

var reg:TRegistry;

begin
reg:=TRegistry.Create;
memo1.Lines.Text:=memo1.Lines.Text+'->Entferne Registry Schreibschutz';
try
   reg.RootKey:=HKEY_CURRENT_USER;
 if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', false)
   then
    begin
    reg.Deletekey('DisableRegistryTools');
    memo1.Lines.Text:=memo1.Lines.Text+'...Done'+#13;
    end
finally
   reg.CloseKey;
end;
Die If-Struktur ist mir noch nicht so ganz klar müsste ja noch irgendwas wie =true oder so hin aber komme damit noch nicht wirklich zurecht.

Rakshasa 19. Apr 2010 18:24

Re: Registry Key löschen
 
Welches Betriebssystem nutzt Du? Spätestens ab Vista dürften solche Eingriffe wie Du sie durchführst nicht möglich sein (Stichwort Benutzerrechte).

Teste das Ganze doch mal in einem Testschlüssel unter "\Software\Test" oder so. Wenn das Da mit dem gleichen Code klappt, weißt Du, dass es Rechteproblem ist.

//edit: Den führenden Backslash hast Du immer noch nicht drin ;)

DarkProtector 19. Apr 2010 18:28

Re: Registry Key löschen
 
Ok mit neuen Rechten gibt er ein Done aus. Machen tut er trotzdem nichts. (Pfad, Rechte und Backslash sind korrekt).

DeddyH 19. Apr 2010 18:56

Re: Registry Key löschen
 
Sicher gibt er "Done" aus, da Du ja den Rückgabewert von DeleteKey nicht auswertest.

DarkProtector 19. Apr 2010 19:03

Re: Registry Key löschen
 
Ok aber was genau bringt mir das? Ich weiß ja das es nicht funktioniert. Und falls ich das ganze versuchen soll muss ich das mit einer Boolean Variable machen, richtig?

Teekeks 19. Apr 2010 20:45

Re: Registry Key löschen
 
Du hast ja den slash immer noch nicht gesetzt:
Delphi-Quellcode:
procedure TForm1.UnlockClick(Sender: TObject);

var reg:TRegistry;

begin
reg:=TRegistry.Create;
memo1.Lines.Text:=memo1.Lines.Text+'->Entferne Registry Schreibschutz';
try
   reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey({-->}'\'{<--}+'Software\Microsoft\Windows\CurrentVersion\Policies\System', false)
   then
    begin
    reg.Deletekey('DisableRegistryTools');
    memo1.Lines.Text:=memo1.Lines.Text+'...Done'+#13;
    end
finally
   reg.CloseKey;
end;

DarkProtector 19. Apr 2010 20:49

Re: Registry Key löschen
 
Der ist schon gesetzt keine Sorge. Daran liegt es nicht.

Rakshasa 19. Apr 2010 20:51

Re: Registry Key löschen
 
Tritt das Problem bei jedem beliebigen Schlüssel auf oder nur bei dem von Dir angegebenen?

Teekeks 19. Apr 2010 20:51

Re: Registry Key löschen
 
Zitat:

Zitat von DarkProtector
Ok aber was genau bringt mir das? Ich weiß ja das es nicht funktioniert. Und falls ich das ganze versuchen soll muss ich das mit einer Boolean Variable machen, richtig?

falsch:
Delphi-Quellcode:
    begin
    if reg.Deletekey('DisableRegistryTools') then
      memo1.Lines.Text:=memo1.Lines.Text+'...Done'+#13;
    end

DarkProtector 19. Apr 2010 20:57

Re: Registry Key löschen
 
Habe das mal eingefügt,sagt nun immer noch "Done", passieren tut weiterhin gar nichts.

Nochmal mein Quelltext:
Delphi-Quellcode:
procedure TForm1.UnlockClick(Sender: TObject);

var reg:TRegistry;

begin
reg:=TRegistry.Create;
memo1.Lines.Text:=memo1.Lines.Text+'->Entferne Registry Schreibschutz';
try
   reg.RootKey:=HKEY_CURRENT_USER;
   if reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\System', false)
   then
    begin
     if reg.Deletekey('DisableRegistryTools') then
     memo1.Lines.Text:=memo1.Lines.Text+'...Done'+#13
     else memo1.Lines.Text:=memo1.Lines.Text+'...Fehler!'+#13;
    end
   else memo1.Lines.Text:=memo1.Lines.Text+'...Fehler!'+#13;
finally
   reg.CloseKey;
end;
Bei einem anderen Schlüssel funktioniert dieser Text ebenfalls nicht.

Luckie 19. Apr 2010 21:26

Re: Registry Key löschen
 
Mach die Fehlerbehandlung doch endlich mal gescheit:
Delphi-Quellcode:
else memo1.Lines.Text:=memo1.Lines.Text+SysErrorMessage(GetLastError);
Dann weißt du auch, warum es fehl schlägt.

SirThornberry 19. Apr 2010 21:37

Re: Registry Key löschen
 
@Luckie: Das könnte aber so schief gehen. Denn die Abfrage von memo1.Lines.Text nutzt auch Apifunktionen welche eventuell den LastError setzen.

Was mir aber schon im ersten Beitrag aufgefallen ist. Warum wird der gesamte Text des Memos abgefragt um dann das abgefragte zu erweitern und komplett zu zuweisen. Sinnvoller wäre hier doch die Verwendung von
Delphi-Quellcode:
memo1.lines.add(Text_to_add);

RWarnecke 19. Apr 2010 21:42

Re: Registry Key löschen
 
Hallo DarkProtector,

kann es sein, dass DisableRegistryTools garkein Key ist, sonder ein Wert in der Registry. Denn dann musst Du DeleteValue nehmen statt DeleteKey.

Luckie 19. Apr 2010 21:49

Re: Registry Key löschen
 
Zitat:

Zitat von SirThornberry
@Luckie: Das könnte aber so schief gehen. Denn die Abfrage von memo1.Lines.Text nutzt auch Apifunktionen welche eventuell den LastError setzen.

Die Wahrscheinlichkeit, dass die Methoden von TMemo einen API-Aufruf versauen, ist recht gering.

DarkProtector 20. Apr 2010 17:24

Re: Registry Key löschen
 
Mein Fehler, DeleteValue brachte den gewünschten Erfolg, Danke an alle.

PS: Die SystemError Meldungen kann ich nicht gebrauchen sie geben nur "Der Vorgang wurde erfolgreich beendet" aus, wenn man zu wenig Rechte besitzt.

Christian Seehase 20. Apr 2010 18:22

Re: Registry Key löschen
 
Zitat:

Zitat von DarkProtector
PS: Die SystemError Meldungen kann ich nicht gebrauchen sie geben nur "Der Vorgang wurde erfolgreich beendet" aus, wenn man zu wenig Rechte besitzt.

Ersatzweise könnest Du auch mal versuchen auf TRegistry zu verzichten, und die zugrundeliegenden API-Funktionen benutzen.
Deren Rückgabewerte sind meist deutlich aussagekräftiger als die der TRegistry-Methoden.


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