0

サブキー ツリーを削除してエントリを再読み込みする必要があるアプリケーションがあります。ツリーの値が変更されているか、追加の値が追加されている可能性があり、デフォルトの状態にリセットする必要があります。key.DeleteSubKeyTree() でサブツリーを削除すると、ベース レジストリ設定を読み込もうとするまで、すべてがうまく機能します。この時点で、Illegal Operation エラー (削除対象としてマークされたレジストリ キーに対して不正な操作が試行されました) が発生します。

では、削除されたエントリを閉じる/フラッシュするにはどうすればよいですか? すべての削除操作は、参照ではなく名前でサブキー/値を操作するように見えるため、直接閉じることはできません。ルートキーを閉じています。

値が追加された可能性があるため、値を設定するだけでなく、追加されたキー (ベース レジストリにないもの) がレジストリからクリアされるように、削除する必要があります。

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 に答える