我试图让我的程序确定它是否有权删除 C# 中的注册表项。我一直在尝试这段代码,它返回 true,而实际上我没有正确的注册表项权限。
public static bool CanDeleteKey(RegistryKey key)
{
try
{
if (key.SubKeyCount > 0)
{
bool ret = false;
foreach (string subKey in key.GetSubKeyNames())
{
ret = CanDeleteKey(key.OpenSubKey(subKey));
if (!ret)
break;
}
return ret;
}
else
{
RegistryPermission r = new
RegistryPermission(RegistryPermissionAccess.AllAccess, key.ToString());
r.Demand();
return true;
}
}
catch (SecurityException)
{
return false;
}
}
我传递给此函数的注册表项是HKEY_CLASSES_ROOT\eHomeSchedulerService.TVThumbnailCache
. 它应该重新诅咒子密钥CLSID
并返回 false,因为仅为 TrustedInstaller 设置了完全控制权限。
以下是HKEY_CLASSES_ROOT\eHomeSchedulerService.TVThumbnailCache\CLSID
来自 regedit 的权限:
我应该注意我正在以管理权限运行代码。另外,我知道在删除注册表项时可以使用 try-catch 块,但我想知道是否可以事先将其删除。