![]() |
Registry Key löschen
Hallo,
ich bin neu hier und wollte eben mal einen Registry Key löschen:
Delphi-Quellcode:
Das habe ich bis jetzt, passieren tut nichts. Wäre nett wenn ihr mir helfen könnt :).
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; |
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. |
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; |
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.
|
Re: Registry Key löschen
Danke schon mal schaue mir das ganze nochmal in eurer Datenbank an.
|
Re: Registry Key löschen
da gibt es eigentlich nicht viel anzusehen:
Delphi-Quellcode:
if openkey(...) then
begin [...] end else ShowMessage('Openkey ist fehlgeschlagen'); |
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); |
Re: Registry Key löschen
Funktioniert leider immer noch nicht. Zur allgemeinen Information ich habe
Delphi-Quellcode:
drin und alles mit Administrationsrechten ausgeführt.
Uses ...,Registry;
Edit: So habe das ganze nun nochmal mit einer If-Struktur überarbeitet:
Delphi-Quellcode:
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.
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; |
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 ;) |
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).
|
Re: Registry Key löschen
Sicher gibt er "Done" aus, da Du ja den Rückgabewert von DeleteKey nicht auswertest.
|
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?
|
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; |
Re: Registry Key löschen
Der ist schon gesetzt keine Sorge. Daran liegt es nicht.
|
Re: Registry Key löschen
Tritt das Problem bei jedem beliebigen Schlüssel auf oder nur bei dem von Dir angegebenen?
|
Re: Registry Key löschen
Zitat:
Delphi-Quellcode:
begin
if reg.Deletekey('DisableRegistryTools') then memo1.Lines.Text:=memo1.Lines.Text+'...Done'+#13; end |
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:
Bei einem anderen Schlüssel funktioniert dieser Text ebenfalls nicht.
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; |
Re: Registry Key löschen
Mach die Fehlerbehandlung doch endlich mal gescheit:
Delphi-Quellcode:
Dann weißt du auch, warum es fehl schlägt.
else memo1.Lines.Text:=memo1.Lines.Text+SysErrorMessage(GetLastError);
|
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);
|
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 ![]() |
Re: Registry Key löschen
Zitat:
|
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. |
Re: Registry Key löschen
Zitat:
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