我试着写一个注册表子项及其相应的值注册表如下:
const string subKey = @"SOFTWARE\Apple\Banana\";
const string regKey = "pip";
var rk = Registry.LocalMachine.OpenSubKey(subKey);
if (rk == null)
rk = Registry.LocalMachine.CreateSubKey(subKey);
var rv = rk.GetValue(regKey);
if (rv == null)
rk.SetValue(regKey, "XXX");
return rv.ToString();
现在的问题是,我当我手动查找的位置(通过注册表编辑器),我不能看到该文件夹SOFTWARE\Apple\Banana
在HKLM
。
但是当我再次运行上面的代码和调试,我可以看到,无论Registry.LocalMachine.OpenSubKey(subKey)
和rk.GetValue(regKey)
得到保存的前值。 然而,我不要通过注册表编辑器看到在给定位置的值。 因此,对搜索注册表,我可以看到在以下位置上键和值:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
根据这两个值保持完全按照我得救了。 所以,我意识到这是从那里我的应用程序读取,虽然在我的代码我把它从值HKLM\SOFTWARE\Apple\Banana\
..
这究竟是为什么? 这是否与访问权限问题?
这是预期的行为? 在这个意义上,这个值是对我很重要,所以我只知道如果没有与自动搬迁相关的一些风险!
有没有写注册表的一个适当的方式,使之保持在其确切的位置..
我的帐户是管理员之一,我使用的是32位的Windows 7。
编辑:正如我才知道,该注册表项被保存在当前用户的位置,而不是HKLM。 当我查询了reg值从不同的帐户,我没有得到的值。 总之,在第一这一切保存到HKLM没有意义:(