C# 注册表访问异常问题
我目前正在构建一个注册表资源管理器,主要是因为我想支持一些更好的搜索操作。比如“全部查找”和正则表达式。我面临的一个问题是,一些密钥在打开时抛出安全异常。我尝试过使用管理员权限运行该应用程序,我的用户帐户也是管理员。我在清单中嵌入了“RequiredAdministrator”请求的权限。我还尝试将ClickOnce安全设置设置为完全信任,这与requireAdministrator不兼容,或者Visual Studio告诉我。。。。似乎没有什么能帮助避免这个例外 我只想迭代所有的键。我不希望添加/删除密钥。如果用户希望删除密钥,但没有删除权限,则会显示错误消息。我只想拥有不受限制的读取权限。这可能吗 FTR:我在Win7 x64上,使用Vs2010u,项目是用C#on.NET4.0编写的。如果regedit能够读取所有键,即使它不允许您编辑其中的一些键。我们也可以制作一个应用程序来做同样的事情,这似乎是合适的。虽然我发现这很难,而且在www.Only链接圈上似乎没有任何真正的帮助,耶 [编辑] 以下是读取密钥的代码:C# 注册表访问异常问题,c#,.net,permissions,registry,C#,.net,Permissions,Registry,我目前正在构建一个注册表资源管理器,主要是因为我想支持一些更好的搜索操作。比如“全部查找”和正则表达式。我面临的一个问题是,一些密钥在打开时抛出安全异常。我尝试过使用管理员权限运行该应用程序,我的用户帐户也是管理员。我在清单中嵌入了“RequiredAdministrator”请求的权限。我还尝试将ClickOnce安全设置设置为完全信任,这与requireAdministrator不兼容,或者Visual Studio告诉我。。。。似乎没有什么能帮助避免这个例外 我只想迭代所有的键。我不希望添
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); }
}
}
这是故意的。有许多与安全相关的密钥只能由系统帐户访问。你不能用那个帐户。Regedit也无法读取这些键,它们只是不可见。避免昂贵的异常需要pinvoke。能否确认regedit可以看到程序无法看到的密钥?因为有些键连regedit都看不见(但可能是程序枚举的)?