У меня была та же проблема, но другое разрешение. Вызов DeleteSubKeyTree вызвал ArgumentException, заявив, что ключ не существует. Это конечно делает! Я перебираю существующие имена ключей и могу создать RegistryKey.
using (RegistryKey regClasses = Registry.ClassesRoot.OpenSubKey("CLSID", true))
{
foreach (var class_guid in regClasses.GetSubKeyNames())
{
bool should_remove = false;
using (RegistryKey productKey = regClasses.OpenSubKey(class_guid))
should_remove = <some code here>
if (should_remove)
regClasses.DeleteSubKeyTree(class_guid);
}
}
Тогда я понял, что отлаживаю в режиме пользователя. Когда я работал в качестве администратора, он работал нормально. Странно, что первый OpenSubKey работает в пользовательском режиме, но когда я открываю подразделы ниже этого, я правильно получаю Отказ в доступе в пользовательском режиме.