Registry.CurrentUser.CreateSubKey 没有创建任何子键?

Posted

技术标签:

【中文标题】Registry.CurrentUser.CreateSubKey 没有创建任何子键?【英文标题】:Registry.CurrentUser.CreateSubKey not creating any sub key? 【发布时间】:2019-04-08 01:54:10 【问题描述】:

我正在尝试使用以下代码设置注册表值。

static void Main(string[] args)

    Microsoft.Win32.RegistryKey rkey;
    rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("KEYSUB");
    rkey.SetValue("TestKey", "123123");

    RegistryKey myKey = Registry.LocalMachine.OpenSubKey("KEYSUB", true);

    if (myKey != null)
     
          Console.WriteLine(myKey.ToString());
     

但 myKey 始终为空,并且在 HKEY_CURRENT_USER/Software 或其他任何地方都没有创建文件夹。 我做错了什么?

【问题讨论】:

【参考方案1】:

myKey 始终为 null,因为您在 CurrentUser 中创建密钥,但查询 LocalMachine。

如果要在 HKEY_CURRENT_USER/Software 中创建密钥,请先打开 softwareKey = Registry.CurrentUser.OpenSubKey("Software") 再打开 softwareKey.CreateSubKey 那里的密钥。

【讨论】:

rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("KEYSUB"); 它实际上在哪里创建 KEYSUB 文件夹?只是好奇。 @Sabir,在 NT 中,注册表配置单元安装在“\Registry”键对象下。系统配置单元安装在“\Registry\Machine”子项下,用户配置单元(即“ntuser.dat”)位于“\Registry\User”下,并以用户的安全标识符(SID,例如“S-1- 5-18")。 Windows API 打开并缓存这些键的句柄,以及当前用户的子键。句柄值是可变的,具体取决于当时的第一个可用句柄,因此 API 将这些句柄映射到预定义的伪句柄 HKLM、HKU 和 HKCU。因此“HKCU\KEYSUB”实际上是“\Registry\User\[SID]\KEYSUB”。

以上是关于Registry.CurrentUser.CreateSubKey 没有创建任何子键?的主要内容,如果未能解决你的问题,请参考以下文章