修改c#中的现有注册表项值

时间:2013-03-28 06:47:31

标签: c# windows-7 visual-studio-2012 registry

我想使用Windows 7中的C#代码修改注册表路径SOFTWARE\Wow6432Node\Program\SubProgram中的数据。我能够读取该值,但我无法写入注册表。 这是代码:

RegistryKey SUBKEY;
RegistryKey TAWKAY = RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, "");
string subkey = "SOFTWARE\\Wow6432Node\\Program\\SubProgram ";
if (TAWKAY.OpenSubKey(subkey) != null)   // Get values from Registry
{

    TAWKAY = RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, "");
    SUBKEY = TAWKAY.OpenSubKey(subkey); // subkey opens
    SUBKEY = TAWKAY.OpenSubKey(subkey,true); // subkey not open shows error Requested registry access is not allowed 
    SUBKEY.SetValue("Some name", "1234567890");
    Console.WriteLine(SUBKEY.GetValue("Some name").ToString());
}
else
{
    Console.WriteLine("Cannot open registry");
}

Console.Read();

如果我设置OpenSubKey(subkey, true),则会显示错误消息Requested registry access is not allowed

是否需要写入注册表的权限?  请帮我解决问题

3 个答案:

答案 0 :(得分:6)

Wow6432Node不是注册表中的真实路径。它是64位操作系统中32位密钥的别名。

您必须使用RegistryView.Registry32才能指定您希望使用32位。

RegistryKey reg32key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey reg_32bit_AppKey = reg32key.OpenSubKey(@"SOFTWARE\Program\SubProgram");
if (reg_32bit_AppKey != null)
{
    // Here you can work with "SOFTWARE\\Wow6432Node\\Program\\SubProgram "
}

答案 1 :(得分:0)

在HKLM中修改/删除/添加密钥需要管理员权限。

在这种情况下,您需要将应用程序清单requestedExecutionLevel值更改为requireAdministrator

答案 2 :(得分:0)

最好使用“Reg”命令以便在注册表上执行任何操作。

即使您想要访问远程计算机的注册表,也不需要该计算机的凭据,但计算机名称已足够。

有关“REG”命令的更多信息,请参阅以下链接

http://technet.microsoft.com/en-us/library/cc732643(v=ws.10).aspx