注册表访问异常问题
本文关键字:问题 异常 访问 注册表 | 更新日期: 2023-09-27 18:06:34
我目前正在构建一个注册表资源管理器,主要是因为我想支持一些更好的搜索操作。比如"查找所有"和正则表达式。我面临的一个问题是,一些密钥在打开时抛出安全异常。我已经尝试以管理员权限运行应用程序,我的用户帐户也是管理员。我嵌入了一个带有"requireadadministrator"请求权限的清单。我还尝试将ClickOnce安全设置为完全信任,这与requireadadministrator不兼容,或者Visual Studio告诉我....似乎没有什么能帮助避免这个异常。
我只想遍历所有的键。我不希望添加/删除键。如果用户希望删除密钥,但没有权限这样做,则会显示一条错误消息。我只是想能够有无限制的读访问。这可能吗?
FTR:我在Win7 x64上使用Vs2010u,项目是在。net 4.0上用c#编写的。如果regedit能够读取所有键,即使它不允许您编辑其中的一些键。似乎我们也可以制作一个应用程序来做同样的事情。虽然我发现这很困难,而且网上似乎没有任何真正的帮助。只有链接圈,耶。
[编辑]下面是读取键的代码: 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); }
}
}
这是设计。有许多与安全相关的密钥只能由System帐户访问。你不能用那个账户。Regedit也不能读取这些键,它们只是不可见。要避免代价高昂的异常需要使用pinvoke.