我目前正在构建一个注册表浏览器,主要是因为我想支持一些更好的搜索操作。就像'找到所有'和正则表达式一样。我面临的一个问题是,一些密钥在打开时会抛出安全异常。我已经尝试使用管理员权限运行应用程序,我的用户帐户也是管理员。我嵌入了一个带有“requireAdministrator”请求权限的清单。我还尝试将ClickOnce安全设置设置为完全信任,这与requireAdministrator不兼容,或者Visual Studio告诉我....似乎没有任何帮助来避免此异常。
我想迭代所有的键。我不想添加/删除密钥。如果用户希望删除密钥并且没有这样做的权限,则会显示错误消息。我只是希望能够拥有无限制的READ访问权限。这可能吗?
FTR:我使用的是Win7 x64并使用Vs2010u,而项目是用.net 4.0中的C#编写的。如果regedit能够读取所有键,即使它不允许您编辑其中的一些键。我们也可以让应用程序做同样的事情似乎是合适的。虽然我发现它非常困难,但在www上似乎没有任何真正的帮助。只有链接链接圈,yay。
[编辑]
以下是读取密钥的代码:
private void IterateSubKeys(RegistryKeyModel key) {
var subKeys = key.Key.GetSubKeyNames();
var values = key.Key.GetValueNames();
foreach (var valuename in values) {
try {
var valueKind = key.Key.GetValueKind(valuename);
var value = key.Key.GetValue(valuename);
key.Values.Add(new RegistryValueModel(valuename, value, valueKind));
}
catch { }
}
foreach (var keyname in subKeys) {
try {
var subkey = key.Key.OpenSubKey(
keyname,
RegistryKeyPermissionCheck.ReadSubTree,
RegistryRights.ReadKey);
key.SubKeys.Add(new RegistryKeyModel(subkey));
}
catch { Console.WriteLine("Error reading key: {0}", keyname); }
}
}
答案 0 :(得分:2)
这是设计的。有许多安全相关的密钥只能访问系统帐户。您无法使用该帐户。 Regedit也无法读取这些键,它们只是不可见。避免昂贵的异常将需要pinvoke。