C# RegistryKey: Subs und Values löschen

OP (Firma: tsx89) Persönliche Seite #4779679
Lesenswert?

Hallo,
wie schon beschrieben möchte ich alle Sub Keys und Values aus einem 
gegebenen RegistryKey löschen. Es gibt hunderte Beispiele, die alle mit 
einer Fehler-Ausgabe enden: "Der Registrierungsschlüssel enthält 
Unterschlüssel. Das rekursive Entfernen wird von dieser Methode nicht 
unterstützt." - und die Einträge sind dann natürlich nicht gelöscht.
Deshalb will ich mir selber eine rekursive Funktion dafür schreiben, 
jedoch funktioniert die auch nicht. ;-)

Ich kann meinen Fehler nicht finden...
1
public static Boolean Remove_AllContent(RegistryKey CurrentKey)
2
{
3
    if (CurrentKey != null)
4
    {
5
        try
6
        {
7
            // Values von CurrentKey Löschen (geht anscheinend):
8
            for (int i = 0; CurrentKey.ValueCount > i; i++)
9
            {
10
                // Namen finden:
11
                String ValString = CurrentKey.GetValueNames()[i];
12
                // Löschen der Value:
13
                CurrentKey.DeleteValue(ValString);
14
            }
15

16
            // SubKeys von CurrentKey Löschen:
17
            for (int i = 0; CurrentKey.SubKeyCount > i; i++)
18
            {
19
                // Namen finden:
20
                String SubKeyString = CurrentKey.GetSubKeyNames()[i];
21
                // Diese Funktion mit Subkey erneut Aufrufen rekursive (Inhalt leeren):
22
                Remove_AllContent(CurrentKey.OpenSubKey(SubKeyString, true));
23
                // SubKey müsste jetzt leer sein - eigentliches Löschen des Keys:
24
                CurrentKey.DeleteSubKey(SubKeyString);
25
                // ------------------------------------------------
26
                // DeleteSubKeyTree geht auch nicht, und sollte aber auch nicht mehr nötig sein.
27
                // CurrentKey.DeleteSubKeyTree(SubKeyString);
28
            }
29
            return true;
30
        }
31
        catch (Exception ex)
32
        {
33
            Debug.WriteLine(CurrentKey.ToString() + Environment.NewLine + ex.Message);
34
        }
35
    }
36
    return false;
37
}
Es soll zuerst im 'eigenen' RegistryKey die Values löschen, und dann in 
die SubKeys hinein gelangen - Dort ebenso die Values löschen, dann darin 
(wieder) alle SubKeys abklappern usw...
Ganz ohne "Key.DeleteSubKeyTree", was auch nicht funktioniert hat!?
Müsste doch eigentlich gehen?

Aber es werden nicht mal die Schleifen komplett durchlaufen - und auch 
versucht volle RegistryKeys zu löschen, was wieder den besagten Fehler: 
"rekursive Entfernen wird von dieser Methode nicht unterstützt" - 
ausgibt. Jedoch sollte das durch den eigenen Code eigentlich gar nicht 
mehr vorkommen!!?? Irgendwie wird die Schleife, die z.B. 2 Durchläufe 
haben soll, vorzeitig verlassen, dadurch ist ein "Parent-Key" nicht ganz 
leer (enthält noch SubKeys).

Der erzeugte Fehler wird abgefangen, und "nach mehrmaligen Versuchen des 
Löschens" ist dann auch alles weg. Ich weiß aber nicht woran das liegt. 
Es soll schon direkt funktionieren ;-)
Kann mir jemand auf die Sprünge helfen? Bin mit dem Rekrusiven wohl doch 
noch nicht so fitt. ;-)

Danke schon mal - und Gruß, tsx
OP (Firma: tsx89) Persönliche Seite #4779683
Lesenswert?

Grad beim nochmal drüberlesen fällt mir ein:
1
String ValString = CurrentKey.GetValueNames()[i];
2
CurrentKey.DeleteValue(ValString);
und "das nächste i",
vertragen sich nicht wegen dem löschen... Rein logisch geht es so ja 
eigentlich gar nicht. (Ups) Aber ist dass schon der Fehler? Kann das 
sein?
Ich versuch´s wohl noch mal.
OP (Firma: tsx89) Persönliche Seite #4779723
Lesenswert?

Ok, ich habs. Ich brauch überhaupt kein i, nur überall 0; Die Schleife 
hat sich sonnst selbst aufgegessen.
Neu:
1
for (int i = 0; CurrentKey.ValueCount > 0; i++)
2
{
3
   NameString = CurrentKey.GetValueNames()[0];                        
4
   CurrentKey.DeleteValue(NameString);
5
}
Danke trotzdem.

Edit: Thread kann gelöscht werden, und ich werde einen anderen 
Schleifentyp benutzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren