gpt4 book ai didi

c# - 为什么注册表写在与预期不同的位置?

转载 作者:太空狗 更新时间:2023-10-29 17:49:43 25 4
gpt4 key购买 nike

我尝试像这样将一个注册表子项及其对应的值写入注册表:

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();

现在的问题是,当我手动查看位置(通过注册表编辑器)时,我在 HKLM 中看不到文件夹 SOFTWARE\Apple\Banana

但是当我再次运行上面的代码并调试时,我可以看到 Registry.LocalMachine.OpenSubKey(subKey)rk.GetValue(regKey) 都产生了在保存值之前。但是我没有通过 regedit 看到给定位置的值。因此,在搜索注册表时,我可以在以下位置看到上述键和值:

  1. HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

  2. HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

在这两个值下,值与我保存的完全相同。所以我意识到这是我的应用程序读取值的地方,尽管在我的代码中我从 HKLM\SOFTWARE\Apple\Banana\..

调用它
  1. 为什么会这样?是否与权限问题有关?

  2. 这是预期的行为吗?从某种意义上说,这个值对我来说非常重要,所以我只是知道自动搬迁是否存在风险!

  3. 是否有一种正确的写入注册表的方法,以便它保留在其确切位置..

我的帐户是管理员一号,我使用的是 32 位 Windows 7。

编辑:据我所知,注册表项存储在当前用户位置而不是 HKLM。当我从另一个帐户查询 reg 值时,我没有得到该值。简而言之,首先将它保存到 HKLM 没有意义:(

最佳答案

是的,这是正确的行为,它正在发生,因为您没有足够的权限直接写入 HKLM 配置单元。它被称为虚拟化,也发生在文件系统中,自 Vista 以来它一直是操作系统中的一种行为。

您应该按原样继续并尝试从您正在写入的同一个 HKLM key 中读取,Windows 将透明地为您重定向。

Preet 有 kindly provided您应该仔细阅读的 MSDN 链接。

请注意,当您在 HKLM 下访问 key 时,您还应该包括所需的权限,即使您以管理员身份运行(因为该 key 不会自动以管理员权限打开,您必须请求它):

key = key.OpenSubKey(keyname, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl);

关于c# - 为什么注册表写在与预期不同的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com