2011-06-16 77 views
0

我想要做的是在一个密钥中有多个 用户名和文件夹路径。如何从注册表中读取所有值

,所以我有这样的结构

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'被拒绝。

+0

您的标签有点奇怪。你的项目是WinForms还是asp.net?这与正则表达式有什么关系? – CodesInChaos 2011-06-16 22:01:24

回答

1

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

默认情况下,您无法将绝大多数HKLM注册表写入为受限用户。有限的用户不得销毁/操纵这些密钥,因为这存在安全风险。

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

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

您有:

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

RegistryKey.CreateSubKey记录为:

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

打开写入权限很可能需要写入权限。

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

+0

那么你能告诉我一种从HKLM中读取的方法吗? – user175084 2011-06-16 21:51:02

+1

'RegistryKey masterKey = Registry.LocalMachine.CreateSubKey(“SOFTWARE \\ xyz”);'这是如何评论出来的? – CodesInChaos 2011-06-16 21:51:49

+0

抱歉,我的错误,我没有看到 – user175084 2011-06-16 21:52:59

1

您在哪一点拒绝访问?你运行这个代码提升或作为管理员?

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

1

我认为Registry.LocalMachine.CreateSubKey(“SOFTWARE \ xyz”)会尝试打开带有写入权限的密钥(如果该密钥存在)。

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

欲了解更多信息,请参考MSDN:http://msdn.microsoft.com/en-us/library/dd411617.aspx

+0

我如何读取userDB密钥的值..?谢谢 – user175084 2011-06-16 22:05:45