AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Registry-Schlüssel löschen

Ein Thema von Luckie · begonnen am 24. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Registry-Schlüssel löschen

  Alt 24. Aug 2004, 12:45
Alsoooooo:
Ich speichere die Einstellungen von meinen Programmen in ein einem Unterschlüssel von: 'HKCU\Software\MichaelPuff'. In dem Programmen baue ich eine Routine ein, die die Programmeinstellunegn wieder löschen soll. Kein Problem so weit. Jetzt kann es aber vorkommen, dass mehrere von meinen Programmen ihre Einstellungen dort speichern. Das sähe dann so aus:
Code:
HKCU\Software\MichaelPuff
  Programm1
  Programm2
Löscht jetzt das letzte Programm seine Einstellungen aus meinem Schlüssel, soll es auch den leeren Schlüssel 'MichaelPuff' löschen. Und das klappt irgendwie nicht. Ich bekomme an der betreffenden Stelle im Code immer 'Zugriff verweigert' zurück.

Hier mein Code:
Delphi-Quellcode:
function DelRegSettings(const CompanyKey, SubKey: String): Boolean;
var
  reg: TRegistry;
  bRes: Boolean;
  sl: TStringList;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CURRENT_USER;
    bRes := reg.KeyExists(CompanyKey);
    if bRes then
    begin
      bRes := reg.OpenKey(CompanyKey, False);
      if bRes then
      begin
        sl := TStringList.Create;
        try
          reg.GetKeyNames(sl);
          if sl.IndexOf(SubKey) <> -1 then
          begin
            bRes := reg.DeleteKey(SubKey);
          end;
        finally
          FreeAndNil(sl);
        end;
        reg.CloseKey;
      end;
      bRes := Reg.OpenKey(CompanyKey, False);
      if bRes then
      begin
        sl := TStringList.Create;
        reg.GetKeyNames(sl);
        //#TODO1: Hier stimmt noch was nicht!!!
        if sl.Count = 0 then
        begin
          bRes := reg.DeleteKey('MichaelPuff'); // <- 'Zugriff verweigert!!!
          // Test
          ShowMessage(SysErrorMessage(GetLasterror));
        end;
        reg.CloseKey;
      end;
    end;
  finally
    FreeAndNil(reg);
  end;
  result := bRes;
end;
Was mache ich falsch? Ich bekomme es einfach nicht hin.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Registry-Schlüssel löschen

  Alt 24. Aug 2004, 13:12
Du musst das reg.CloseKey vor das reg.DeleteKey schreiben, weil geöffnete Schlüssel nicht gelöscht werden können!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Registry-Schlüssel löschen

  Alt 24. Aug 2004, 13:17
Hatte ich auch schon gedacht. Und ich meine es auch schon so probiert zu haben.
Delphi-Quellcode:
      bRes := Reg.OpenKey(CompanyKey, False);
      if bRes then
      begin
        sl := TStringList.Create;
        reg.GetKeyNames(sl);
        reg.CloseKey; // <- CloseKey hier!!!
        //#TODO1: Hier stimmt noch was nicht!!!
        if sl.Count = 0 then
        begin
          bRes := reg.DeleteKey('MichaelPuff');
          // Test
          ShowMessage(SysErrorMessage(GetLasterror));
        end;
      end;
Geht auch nicht. 'Zugriff verweigert'.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Registry-Schlüssel löschen

  Alt 24. Aug 2004, 13:22
Du musst ja auch bRes := reg.DeleteKey(CompanyKey); schreiben!!!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Registry-Schlüssel löschen

  Alt 24. Aug 2004, 13:28
Autsch. Zu meiner Entschuldigung: Es war schon spät und ich hatte schon eine halbe Flasche Sekt getrunken.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: Registry-Schlüssel löschen

  Alt 24. Aug 2004, 13:30
Zitat von Luckie:
Autsch. Zu meiner Entschuldigung: Es war schon spät und ich hatte schon eine halbe Flasche Sekt getrunken.
Die scheinbar immernoch wirkt!!!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Registry-Schlüssel löschen

  Alt 24. Aug 2004, 13:46
Für die CodeLib noch mal komplett: Denkt euch irgendeinen aussagekräftigen Titel aus, mir fällt keiner ein.

Was die Funktion macht, steht oben im ersten Post und ist, denke ich, universell einsetztbar, wenn man seine Einstellungen aus der Registry löschen will. Ich habe sie noch etwas verbessert und optimiert.

Delphi-Quellcode:
function DelRegSettings(const CompanyKey, SubKey: string): Boolean;
var
  reg: TRegistry;
  bRes: Boolean;
  sl: TStringList;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CURRENT_USER;
    // gibt es was zu löschen?
    bRes := reg.KeyExists(CompanyKey);
    if bRes then
    begin
      // Schlüssel öffnen
      bRes := reg.OpenKey(CompanyKey, False);
      if bRes then
      begin
        sl := TStringList.Create;
        try
          // Subkeys holen
          reg.GetKeyNames(sl);
          // ist zu löschender Schlüssel vorhanden?
          if sl.IndexOf(SubKey) <> -1 then
          begin
            bRes := reg.DeleteKey(SubKey);
          end;
          // Liste mit Subkeys löschen
          sl.Clear;
          // noch mal alle Subkeys holen
          reg.GetKeyNames(sl);
          reg.CloseKey;
          // keine Subkeys
          if sl.Count = 0 then
            bRes := reg.DeleteKey(CompanyKey);
        finally
          FreeAndNil(sl);
        end;
      end; // OpenKey
    end; // KeyExists
  finally
    FreeAndNil(reg);
  end;
  result := bRes;
end;
CompanyKey steht zum Beispiel für 'HKCU\Software\MeineFirma' und SubKey entsprechend dann für den Programmnamen der Firma.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 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