我收到报告错误的用户收到错误“System.Security.SecurityException,不允许请求的注册表访问权限”。在尝试阅读注册表时。我想不出为什么有人不能读取注册表,我无法在Windows 7 PC上重现这个问题。受影响的用户正在运行.NET 4.0
这是我正在使用的C#代码:
var baseReg = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
var key = baseReg.OpenSubKey(RegKey, RegistryKeyPermissionCheck.ReadSubTree);
if (key != null)
{
var value = key.GetValue("DisableAutoUpdate", 0);
if (value != null)
{
updatesDisabled = Convert.ToBoolean(value);
}
}
修改 我检查了受影响用户的相关注册表项的权限,标准用户具有该键的读取权限。
编辑2和解决方案: 根据受影响的用户,安装.NET 4.5.2解决了这个问题!我不确定为什么。
感谢@ nozzleman在下面的回答,通过强制它以只读方式打开密钥来解决这个问题。然而,奇怪的是.NET 4.0作为4.5.2看起来表现不同。
答案 0 :(得分:3)
有an overload of the OpenSubKey(..)
- 允许添加第三个参数的方法。您可以尝试将RegistryRights.ReadKey
传递给那个,看看是否能解决问题。
baseReg.OpenSubKey(
RegKey,
RegistryKeyPermissionCheck.ReadSubTree
RegistryRights.ReadKey);
或者,尝试像other overload accepting 2 parameters一样
baseReg.OpenSubKey(RegKey, false);
这导致只读取子键,你不必在给定的szenario中读取整个子树。