C# 编辑注册表不起作用

C# editing Registry does not work

我正在尝试进行一些注册表编辑。下面的代码是我的问题的 MCVE:

        RegistryKey key;
        key = Registry.LocalMachine.OpenSubKey("DRIVERS", true);
        key = key.CreateSubKey("Names");
        key.SetValue("Name", "nick", RegistryValueKind.String);
        key.Close();

该代码工作正常。以下(将 DRIVERS 更改为 SOFTWARE)不:

        RegistryKey key;
        key = Registry.LocalMachine.OpenSubKey("SOFTWARE", true);
        key = key.CreateSubKey("Names");
        key.SetValue("Name", "nick", RegistryValueKind.String);
        key.Close();

对我来说,这两个代码块之间的区别是微不足道的。这个问题的原因是什么,我该如何解决?我已经 运行 作为管理员的代码。

我的最终目标是修改 "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" 文件夹中的值。

我知道这在 Powershell 中是可能的 - 在 C# 中也应该是可能的。

您可以从 32 位进程写入 64 位注册表,但您需要如下显式请求 64 位注册表(根据您在 Q 中的代码修改)。

var hklm = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey key = hklm.OpenSubKey("SOFTWARE", true);
key = key.CreateSubKey("Names");
key.SetValue("Name", "nick", RegistryValueKind.String);
key.Close();