2012-04-05 3 views
0

Ich habe eine Anwendung, die einen Unterschlüsselbaum löschen und die Einträge wiederholen muss. In der Struktur können Werte geändert oder zusätzliche Werte hinzugefügt werden, und ich muss auf den Standardstatus zurücksetzen. Wenn ich den Unterbaum mit key.DeleteSubKeyTree() lösche, funktioniert alles gut, bis ich versuche, die Basisregistrierungseinstellungen zu lesen. An diesem Punkt bekomme ich Illegal Operation Fehler (illegaler Vorgang versucht auf einem Registrierungsschlüssel, der zum Löschen markiert wurde).Wie schließe/lösche ich gelöschte Registrierungsunterschlüssel, damit sie wieder eingefügt werden können? Ungültiger Betriebsfehler geworfen

Also, wie kann ich die gelöschten Einträge schließen/spülen? Sieht so aus, als ob alle Löschoperationen auf Unterschlüssel/Werte nach Name und nicht nach Verweis funktionieren, so dass ich sie nicht direkt schließen kann. Ich schließe den Grundschlüssel.

Aufgrund der Werte, die möglicherweise hinzugefügt wurden, muss ich löschen und nicht nur die Werte festlegen, damit die hinzugefügten Schlüssel (solche, die nicht in der Basisregistrierung enthalten sind) aus der Registrierung gelöscht werden.

Antwort

1

Nach etwas mehr Experimenten konnte ich die Aufgabe ausführen, indem ich alle Werte einzeln löschte und dann die Unterschlüssel löschte. Hier ist eine rekursive Routine, um es zu tun:

 /// <summary> 
    /// Deletes all the values and subkeys of a particular key. 
    /// </summary> 
    /// <param name="key"></param> 
    private static void DeleteRegistrySubStructure(RegistryKey key) 
    { 
     // First, traverse the subkeys to delete the underlying values and subkeys. 
     String[] subKeys = key.GetSubKeyNames(); 
     foreach (var subKeyName in subKeys) 
     { 
      RegistryKey subKey = key.OpenSubKey(subKeyName, true); 
      DeleteRegistrySubStructure(subKey); 
      subKey.Close(); 
      key.DeleteSubKey(subKeyName); 
     } 

     // At this point, all the subkeys (and their values) have been 
     // deleted. So, delete the values for the key for final clean up. 
     string[] valueNames = key.GetValueNames(); 
     foreach (string name in valueNames) 
     {     
      key.DeleteValue(name); 
     } 
    } 
Verwandte Themen