注册表读权限

时间:2015-01-12 10:07:19

标签: c#

我想使用c#列出所有用户数据源但我不能这样做,因为我没有权限读取注册表项。如何获取所有用户数据源?

我尝试了以下代码,但没有使用

private List<string> ENUMDSN()
{
    List<string> list = new List<string>();
    list.AddRange(ENUMDSN(Registry.CurrentUser));
    list.AddRange(ENUMDSN(Registry.LocalMachine));
    XElement xmlele = new XElement("list", list.Select(i => new XElement("list", i)));       
    return list;

}

private IEnumerable<string> ENUMDSN(RegistryKey rootkey)
{        
    RegistryKey regkey = rootkey.OpenSubKey(@"Software\ODBC\ODBC.INI\ODBC Data Sources");

    foreach (string name in regkey.GetValueNames())
    {
        string value = regkey.GetValue(name, "").ToString();
        yield return name;
    }
}

1 个答案:

答案 0 :(得分:-1)

“CurrentUser”注册表项不需要任何特定的权限即可读/写而没有任何问题,但如果您想读取“LocalMachine”子项中必须具有管理员权限的键,则没有其他方法

修改 如果在IIS下运行代码,则无法获取“CurrentUser”或“LocalMachine”下的键值,因为IIS应用程序池不会在“当前帐户”下运行,而是在“用户帐户”下运行。

对于解决方案,您可以更改应用程序池的用户帐户,但出于某些安全原因不建议这样做。