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();
我正在尝试进行一些注册表编辑。下面的代码是我的问题的 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();