0

我有一个需要删除子键树并读取条目的应用程序。树可能更改了值或添加了其他值,我需要重置为默认状态。当我使用 key.DeleteSubKeyTree() 删除子树时,一切正常,直到我尝试读取基本注册表设置。此时我收到非法操作错误(尝试对已标记为删除的注册表项进行非法操作)。

那么,如何关闭/刷新已删除的条目?看起来所有删除操作都按名称对子键/值进行操作,而不是引用,所以我不能直接关闭它。我正在关闭根密钥。

由于可能已经添加了值,我确实需要删除而不只是设置值,以便从注册表中清除添加的键(不在基本注册表中的键)。

4

1 回答 1

1

经过更多的实验,我能够通过单独删除所有值然后删除子键来执行任务。这是一个递归例程:

     /// <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);
         }
     }
于 2012-04-15T15:27:26.930 回答