我尝试将注册表子项及其对应的值写入注册表,如下所示:
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();
现在的问题是,当我手动(通过 regedit)查看该位置时,我看不到SOFTWARE\Apple\Banana
.HKLM
但是当我再次运行上面的代码并调试时,我可以看到两者Registry.LocalMachine.OpenSubKey(subKey)
并rk.GetValue(regKey)
产生之前保存的值。但是我没有通过 regedit 看到给定位置的值。所以在搜索注册表时,我可以在以下位置看到上述键和值:
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 是没有意义的 :(