如何从注册表中读取所有值

时间:2011-06-16 21:28:42

标签: c# asp.net winforms registry

我要做的是拥有多个 一个键中的用户名和文件夹路径。

所以我有这个结构

  

HKEY_LOCAL_MACHINE

     

- 软件

     

- XYZ

     

- userDB

现在在userDB中我有这样的信息

> NAME    TYpe   Data
> 
> Admin  Reg_sz  C:\Desktop
> 
> Admin2 REG_SZ  C:\xyz\logs

如何读取userDB中的值...

任何建议..谢谢

我试过这段代码:

            RegistryKey masterKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\xyz");
        if (masterKey == null)
        {
            //Console.WriteLine("Null Masterkey!");
        }
        else
        {

            table.Rows.Add(false, masterKey.GetValue("userDB"), DateTime.Now);
            dataGridView2.DataSource = table;
            //Console.WriteLine("MyKey = {0}", masterKey.GetValue("userDB"));
        }
        masterKey.Close();

但是我得到了错误 访问注册表项“HKEY_LOCAL_MACHINE \ SOFTWARE \ xyz”被拒绝。

3 个答案:

答案 0 :(得分:1)

当您谈论在主题中阅读值时,您的代码实际上会写入注册表。

默认情况下,您无法写入注册表的大多数HKLM部分作为受限用户。有限的用户可能不会销毁/操纵这些密钥,因为这会带来安全风险。

您可以让安装程序(使用admin privs运行)更改共享注册表项的权限。但那是不好的风格,我不会这样做。

使用asp.net时,可能存在与中等信任模型相关的其他限制。

你有:

RegistryKey masterKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\xyz");

RegistryKey.CreateSubKey记录为:

  

创建新子项或打开现有子项以进行写访问。

打开写访问权限很可能需要写权限。

RegistryKey.OpenSubKey用于打开读取访问密钥。所以它很可能不需要写作权限。

答案 1 :(得分:1)

您在哪个时间点被拒绝访问?您是在提升此代码还是以管理员身份运行?

在调用CreateSubKey()时,您可能会失败,在写入HKEY_LOCAL_MACHINE时需要提升权限。

答案 2 :(得分:1)

我认为如果该密钥存在,则Registry.LocalMachine.CreateSubKey(“SOFTWARE \ xyz”)将尝试使用写访问权限打开密钥。

尝试使用读访问权限打开密钥。 我认为您可以使用CreateSubKey(String,RegistryKeyPermissionCheck)来指定权限访问。

有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/dd411617.aspx