删除子项时出现UnauthorizedAccessException异常

27

我想写一个快速的应用程序来修改一些注册表键。当我通过RegEdit浏览时,可以轻松地修改和删除这些键。

但是当我尝试使用RegistryKey.DeleteSubKey()时,它会抛出UnauthorizedAccessException异常。

有没有办法获取权限来执行此操作?而且,如果我的用户帐户明显有权限进行更改,为什么会存在问题?

编辑:

以下是一些代码:

RegistryKey reg;

try
{
    reg = Registry.CurrentUser.OpenSubKey(BaseKey);
    reg.DeleteSubKey("{" + Item.Guid.ToString() + "}");
}
catch
{
    return false;
}

1
在调用删除之前,您如何打开该键?您能展示一下在调用deletesubkey之前的几行代码吗? - curtisk
如果你有一个打开的句柄(如curtisk所建议的),或者键中不为空值,尝试删除子键时可能会被拒绝。 - ewall
我看不到任何打开的句柄,而且它确实有值,尽管我切换到DeleteSubKeyTree,仍然遇到了相同的问题。 - Adam Haile
1个回答

62

尝试改为初始时以读写方式而不是只读方式打开:

RegistryKey reg;

try
{
    reg = Registry.CurrentUser.OpenSubKey(BaseKey, true); //<--over here!
    reg.DeleteSubKey("{" + Item.Guid.ToString() + "}");
}
catch
{
    return false;
}

4
用手掌猛拍额头 - 谢谢! - Adam Haile
1
我每次都忘记做这件事。 - Phillip Schmidt
1
对于紧凑框架用户,请尝试:reg = Registry.CurrentUser.OpenSubKey(@"", true); - Robbie Dee
可选的布尔参数是一种代码异味。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接