如何在WOW场景中没有WOW重定向的情况下写入HKLM?

时间:2014-01-03 00:22:33

标签: c# windows registry

我有一个WOW场景,想要在

更改Key的值

HKLM \ SOFTWARE \微软\ ABCD \

我正在使用此代码:

String key = @"SOFTWARE\Microsoft\ABCD\";
RegistryKey reg64key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey reg_64bit_Name = reg64key.OpenSubKey(key);
reg_64bit_Name.SetValue("Name","ahsan");

然而这不起作用。任何人都可以建议我需要做什么吗?

NB: 1.不工作意味着我在运行应用程序时遇到以下异常:

System.NullReferenceException: Object reference not set to an instance of an object.

1 个答案:

答案 0 :(得分:1)

首先,通过"这不起作用"你能描述一下错误信息,例外编译错误吗?

据说你的代码已经

reg64key.SetValue("Key","ahsan");

您将看到您正在使用"Key"(作为字符串)。尝试将此更改为。

reg64key.SetValue(key,"ahsan");

因此,您使用的是变量而不是字符串"Key"

编辑:OP改变后

编辑完毕后,我回去试试这个。请参阅下面的代码(经过测试)

RegistryKey reg64key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
String key = @"SOFTWARE\Microsoft\ABCD";

if (reg64key == null)
    throw new Exception("reg64key");

var basekey = reg64key.OpenSubKey(key);
if (basekey == null)
    basekey = reg64key.CreateSubKey(key);

basekey.SetValue("Name", "ahsan");

您将从代码中看到,我们要做的第一件事就是抓住reg64key HKLM。接下来我们检查reg64key是否为空(不应该为null,但你永远不知道)。接下来,我们使用reg64key打开密钥"SOFTWARE\Microsoft\ABCD"。如果找不到(baseKey == null),那么我们创建密钥。

最后,您可以根据需要设置密钥。

希望这有帮助。