.NET中的注册表:DeleteSubKeyTree表示该子项不存在,但是嘿,确实如此!

Cha*_*esB 5 .net registry exception

试图删除子项树:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.hdr..hdr子键有一个子键,没有值.所以我使用这段代码:

RegistryKey FileExts = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts");
RegistryKey faulty = FileExts.OpenSubKey(".hdr");
Debug.Assert (faulty != null && faulty.SubKeyCount != 0);
faulty.Close();
FileExts.DeleteSubKeyTree(".hdr");
Run Code Online (Sandbox Code Playgroud)

我收到ArgumentException消息"无法删除子项树,因为该子项不存在."

WTF?我检查并断言它确实存在?

状态更新

在使用Process Monitor时,".hdr"的子项ACCESS DENIED在运行代码时会出错.我检查了自动调整,但它们看起来很好吗?

Cha*_*esB 6

找到了解决方案,引发了另一个问题......

ACCESS DENIED使用Process Monitor 指出错误之后,我只是尝试单独删除子键:

RegistryKey hdr = FileExts.OpenSubKey(".hdr", true);
foreach (String key in hdr.GetSubKeyNames())
   hdr.DeleteSubKey(key);
hdr.Close();
FileExts.DeleteSubKeyTree(".hdr");
Run Code Online (Sandbox Code Playgroud)

它工作正常,所以这不是一个许可问题!

由于我不明白的原因,DeleteSubKeyTree需要一个空树来工作.

一个解释,有人吗?

  • 谢谢,这让我发疯,告诉我子键在它存在时不存在。 (2认同)