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