Registry.GetValue()和Registry.User.GetValue()返回的结果不同

3

我在output1output2中得到了不同的结果。尽管第一个输出给我实际在注册表中看到的值,但后者只给我默认值。我错过了什么?

String output1 = Registry.GetValue(
  @"HKEY_USERS\blobb", "beep", "nope!") as String;

String output2 = Registry.Users.GetValue(
  @"blobb\beep", "nope!") as String;

我尝试了许多不同的输入字符串,但都没有给我正确的值。

1个回答

3
Registry.Users.GetValue是在根用户键中查找名为'blobb\beep'的值。要获得与您第一个示例相同的结果,您需要类似以下内容:
using (var blobb = Registry.Users.OpenSubKey("blobb"))
{
    String output2 = blobb.GetValue("beep", "nope!") as String
}

对我来说,采用 Registry.GetValue() 方法似乎更为直接明了,但是问题在于我要访问的密钥路径在 "HKEY_USERS" 之后有个很繁琐的数字,在不同的计算机中该数字会有所不同。是否存在一种通用方法,可以访问例如 "HKEY_USERS\S-1-5-21-12345678\Software\Microsoft" 这样的路径?虽然数字可能不同,但 "所有" 计算机上其余部分都相同... - Konrad Viltersten
1
请查看使用 HKEY_CURRENT_USER\blobb - Patrick McDonald
你的意思是完全跳过这个讨厌的数字吗? - Konrad Viltersten
完全可以,假设这个讨厌的数字是当前用户,你可以使用"HKEY_CURRENT_USER\Software\blah"代替"HKEY_USERS\S-1-5-21-NASTYNUMBER\Software\blah"。 - Patrick McDonald
太棒了!我就是没有想到那个...这不是我的最聪明的时刻,嘿嘿。 - Konrad Viltersten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接