注册表访问异常问题

本文关键字:问题 异常 访问 注册表 | 更新日期: 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.