无法在 C# 中编辑 32 位注册表(本地计算机)



我遇到的问题是,当我添加下面显示的代码时,它会将其添加到 64 位版本的 regedit 中。我想将以下代码转换为 32 位版本,因为它似乎在 64 位版本中不起作用。

这是我的代码:

Microsoft.Win32.RegistryKey keyyyyy;
keyyyyy = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList", true);
keyyyyy.SetValue("Sysaccounts", 0);
keyyyyy.Close();

要使用注册表的 32 位视图:

var regularx32View = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
using (RegistryKey regKey32 = regularx32View.CreateSubKey(@"SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList", true))
{
      regKey32.SetValue("Sysaccounts", 0);    
}

要使用注册表的 64 位视图:

var regularx64View = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
using (RegistryKey regKey64 = regularx64View.CreateSubKey(@"SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList", true))
{
      regKey64.SetValue("Sysaccounts", 0);    
}

SysWOW64这个名字是违反直觉的。名称中的 64 部分可能会(错误地)导致某人相信它有 64 位密钥,但实际上它有 32 位密钥。

这是一篇相关文章

如果你想要这个更有魅力和更简单,采取这个:

RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
key.CreateSubKey(@"SOFTWAREPath1Path2").SetValue("KeyName", "KeyValue");
string keyOutput = key.OpenSubKey(@"SOFTWAREPath1Path2").GetValue("KeyName").ToString();
Console.WriteLine(keyOutput);

RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
key.CreateSubKey(@"SOFTWAREPath1Path2").SetValue("KeyName", "KeyValue");
string keyOutput = key.OpenSubKey(@"SOFTWAREPath1Path2").GetValue("KeyName").ToString();
Console.WriteLine(keyOutput);

享受

最新更新