首先,我认识到这个问题与其他问题相似。但是,到目前为止,我的研究还没有找到针对我所面临的具体问题的解决方案,只是针对类似情况的问题找到了很多解决方案。
我是注册表功能的新手,所以我一直在使用虚拟机来处理它们,看看我能做什么。目前,我正在尝试测试子键和 HKEY_CURRENT_USER 的创建、读取和后续删除。目前,除了删除之外,我可以执行该列表中的所有操作。相关代码如下:
//This first sample will attempt to create a test key under HKEY_CURRENT_USER
Console.WriteLine("Creating subkey under HKEY_CURRENT_USER");
RegistryKey testKey2 = Registry.CurrentUser.CreateSubKey("SubKeyTester");
Console.WriteLine("testKey2 is now assigned to {0}", testKey2);
//This ensures that testKey2 is the value that I think it is
Console.WriteLine("testKey2 value = {0}\n", testKey2);
输出为:
开始测试...在 HKEY_CURRENT_USER 下创建子键
testKey2 现在分配给 HKEY_CURRENT_USER\SubKeyTester
testKey2 值 = HKEY_CURRENT_USER\SubKeyTester
值得注意的是,testKey2 存储了“HKEY_CURRENT_USER\SubKeyTester”,而不是我预期的“SubKeyTester”。在此之后,我可以检查 HKEY_CURRENT_USER 下的子项并验证是的,“SubKeyTester”确实存在于 CurrentUser 子项中。现在,我只需要删除它。我的代码如下:
//This portion of the test will attempt to delete SubKeyTester from
//HKEY_CURRENT_USER
Console.WriteLine("Attempting to delete test subkey\n");
try
{
Registry.CurrentUser.DeleteSubKeyTree(testKey2.ToString());
Console.WriteLine("Target has been deleted\n");
}
catch(Exception e)
{
Console.WriteLine("The key targeted for deletion... is not found.\nError: {0}\n", e);
}
//Another safety check to verify that only SubKeyTester has been deleted
Console.WriteLine("There are {0} subkeys under {1}.",
Registry.CurrentUser.SubKeyCount.ToString(), Registry.CurrentUser.Name);
foreach (string subKeyName in Registry.CurrentUser.GetSubKeyNames())
Console.WriteLine(subKeyName);
testKey2.Close();
输出通知我:“错误:System.ArgumentException:无法删除子项树,因为子项不存在。” 然后它会列出 HKEY_CURRENT_USER 下的所有子键,其中仍然包括 testKey“SubKeyTester”。
我相信这个问题可以通过在 DeleteSubKeyTree 调用中硬编码该子键的路径来解决,但我想避免这种情况。我宁愿能够调用 testKey2 作为参数并以这种方式删除密钥。有没有办法做到这一点?