我要做的是拥有多个 一个键中的用户名和文件夹路径。
所以我有这个结构
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 :(得分:1)
当您谈论在主题中阅读值时,您的代码实际上会写入注册表。
默认情况下,您无法写入注册表的大多数HKLM
部分作为受限用户。有限的用户可能不会销毁/操纵这些密钥,因为这会带来安全风险。
您可以让安装程序(使用admin privs运行)更改共享注册表项的权限。但那是不好的风格,我不会这样做。
使用asp.net时,可能存在与中等信任模型相关的其他限制。
你有:
RegistryKey masterKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\xyz");
创建新子项或打开现有子项以进行写访问。
打开写访问权限很可能需要写权限。
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