首先,我认识到这个问题与其他问题类似。然而,到目前为止,我的研究还没有找到解决我所面临的具体问题的方法,只是针对类似情况的问题的很多解决方案。
我是注册表功能的新手,所以我一直在使用虚拟机来搞乱他们,看看我能做些什么。目前,我正在尝试测试subKey和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 value = 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作为参数并以这种方式删除密钥。有没有办法做到这一点?
答案 0 :(得分:0)
我发现了我的错误,而且我在正确的轨道上。正确的代码如下:
Console.WriteLine("Creating subkey under HKEY__CURRENT_USER\n");
const string testKey2 = "SubKeyTester";
Registry.CurrentUser.CreateSubKey(testKey2);
这样,testKey2始终是“SubKeyTester”。然后,唯一需要的其他更改是删除函数的参数。
Registry.CurrentUser.DeleteSubKeyTree(testKey2);
删除ToString()方法。
我认为问题就像我说的那样,testKey2获得了“HKEY_CURRENT_USER // SubKeyTester”,而不仅仅是“SubKeyTester”。但是这样,testKey2只获得“SubKeyTester”,它允许正确的文件路径到适当的密钥。
我曾尝试使用
Registry.DeleteSubKeyTree(testKey2.ToString());
绕过路径错误,但“注册表”没有DeleteSubKeyTree方法,因此根本无效。
此外,此解决方案不需要.close()语句,因为没有打开任何键。