2015-01-12 239 views
0

我想列出所有使用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; 
    } 
} 
+0

您是否尝试过使用提升的权限运行此代码?以管理员身份运行Visual Studio。 – Marco

+0

也许这个主题将有助于:http://stackoverflow.com/questions/562016/listing-odbc-data-sources-in-c-sharp – psantos

+0

什么说的例外? – i486

回答

-1

“当前用户”的注册表项不需要你可以没有任何问题的读/写任何特定的权限,但是如果你想读的按键,在“ LocalMachine“子项你必须拥有管理员权限,没有其他办法。

编辑: 如果IIS下运行你的代码,因为IIS应用程序池的“经常账户”下不跑,他们在自己的“用户运行你不能下的“当前用户”或“LOCALMACHINE”键值账户”。

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

+0

实际上,当我在本地系统中运行我的应用程序时,我正在获取用户数据源,但是我无法从iis中获取,而是在注册表项的空位获取null – jai

+0

是的,您可以获取空列表,因为IIS应用程序池在不同的用户帐户下运行不是你的用户帐户。 – iBener

+0

如何在我的用户帐户上运行我的应用程序 – jai