我无法删除注册表子项



我正在制作一个游戏应用程序,如果你被服务器禁止。在HKEY_CURRENT_USERHKEY_CURRENT_USERSoftwareWindows中有两个随机数字键

按钮1(删除HKEY_CURRENT_USER的第一个子键(

但当我把相同的代码放在button2中时,它在Software\windows中的find子键,但在删除时出错。

string[] dummy = new string[10];
foreach (string s in Registry.CurrentUser.OpenSubKey(@"Software\Microsoft").GetSubKeyNames())
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft" + "\" + s);
string Key = rk.ToString();
string Key2 = Key.Replace("HKEY_CURRENT_USER\Software\Microsoft\", "");
bool Check = IsDigitsOnly(Key2);
if (Check)
{
RegistryKey ecks = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft" + "\" + s);
{
string ecks2 = ecks.ToString();
string ecksxd = ecks2.Replace("HKEY_CURRENT_USER\Software\Microsoft\", "");
string[] hello = GetRegistry2(ecksxd);
Registry.CurrentUser.DeleteSubKey(Key2);
}
}
}

项目来源

单击此处查看来源

完成!我发现了错误。问题是在尝试直接删除子密钥时获取

我把这个代码添加到

RegistryKey hkcus = Registry.CurrentUser; RegistryKey sware = hkcus.OpenSubKey(@"Software\",true); RegistryKey msoft = sware.OpenSubKey(@"Microsoft\",true); msoft.DeleteSubKey(Key2,true);

假设您正在尝试删除HKCU/Software/Microsoft/Blah/CurrentVersion/MyCCoolSubKey中的密钥。当你做

string Key2 = Key.Replace("HKEY_CURRENT_USER\Software\Microsoft\", "");

你的Key2(为什么它是大写的btw?(变成

Blah/CurrentVersion/MyCoolSubKey

然后你打电话给

Registry.CurrentUser.DeleteSubKey(Key2);

注册表。CurrentUser。DeleteSubKey不知道Key2是从哪里来的。它只是按照你说的做:"从HKCU中删除名为Blah/CurrentVersion/MyCCoolSubKey的子密钥">

这实际上是试图删除

HKCU/Blah/CurrentVersion/MyCoolSubKey

难怪它找不到那个子密钥。

虽然我相信你关于不分青红皂白地删除注册表中随机键的整个想法是完全有缺陷的,但谈到算法,你可能会通过扔掉所有未使用的代码并保持简单来改进它,比如:

foreach (string s in Registry.CurrentUser.OpenSubKey("Software\Microsoft").GetSubKeyNames())
{
if (s.All(Char.IsDigit))
{
Registry.CurrentUser.DeleteSubKey($"Software\Microsoft\{s}");
}
}

我再次强烈反对以这种方式干预注册的想法。

最新更新