Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注册表访问异常问题_C#_.net_Permissions_Registry - Fatal编程技术网

C# 注册表访问异常问题

C# 注册表访问异常问题,c#,.net,permissions,registry,C#,.net,Permissions,Registry,我目前正在构建一个注册表资源管理器,主要是因为我想支持一些更好的搜索操作。比如“全部查找”和正则表达式。我面临的一个问题是,一些密钥在打开时抛出安全异常。我尝试过使用管理员权限运行该应用程序,我的用户帐户也是管理员。我在清单中嵌入了“RequiredAdministrator”请求的权限。我还尝试将ClickOnce安全设置设置为完全信任,这与requireAdministrator不兼容,或者Visual Studio告诉我。。。。似乎没有什么能帮助避免这个例外 我只想迭代所有的键。我不希望添

我目前正在构建一个注册表资源管理器,主要是因为我想支持一些更好的搜索操作。比如“全部查找”和正则表达式。我面临的一个问题是,一些密钥在打开时抛出安全异常。我尝试过使用管理员权限运行该应用程序,我的用户帐户也是管理员。我在清单中嵌入了“RequiredAdministrator”请求的权限。我还尝试将ClickOnce安全设置设置为完全信任,这与requireAdministrator不兼容,或者Visual Studio告诉我。。。。似乎没有什么能帮助避免这个例外

我只想迭代所有的键。我不希望添加/删除密钥。如果用户希望删除密钥,但没有删除权限,则会显示错误消息。我只想拥有不受限制的读取权限。这可能吗

FTR:我在Win7 x64上,使用Vs2010u,项目是用C#on.NET4.0编写的。如果regedit能够读取所有键,即使它不允许您编辑其中的一些键。我们也可以制作一个应用程序来做同样的事情,这似乎是合适的。虽然我发现这很难,而且在www.Only链接圈上似乎没有任何真正的帮助,耶

[编辑]

以下是读取密钥的代码:

    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都看不见(但可能是程序枚举的)?