1

我想读取和修改我的 NetworkAddress 的注册表项值。它在注册表中的路径是:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class{4D36E972-E325-11CE-BFC1-08002BE10318}\0011

在该路径中有一个名为 NetworkAddress 的键。如何读取和修改此密钥?

这是我尝试过的:

 RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0011",true);
       MessageBox.Show((string) myKey.GetValue("NetworkAddress"));
       myKey.SetValue("NetworkAddress", "002408B2A2D2", RegistryValueKind.String);

我已经尝试过这段代码,它给了我这个异常:对象引用未设置为对象的实例。我该如何解决这个问题?请帮助我,谢谢。

4

2 回答 2

2

您收到异常是因为工厂方法在指定位置找不到子键并返回null

尽管您的子密钥地址完全有效,但因为您正在使用Registry.LocalMachine.OpenSubKey您实际上是HKEY_LOCAL_MACHINE在子密钥地址中指定了两次。解决方案是将您的子键路径更改为:

SYSTEM\ControlSet001\Control\Class{4D36E972-E325-11CE-BFC1-08002BE10318}\0011

您可能还想考虑一种更强大的方法:

using (RegistryKey myKey =
    Registry.LocalMachine.OpenSubKey(
        @"SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0011", true))
{
    if (myKey != null)
    {
        Console.WriteLine((string) myKey.GetValue("NetworkAddress"));
        myKey.SetValue("NetworkAddress", "002408B2A2D2", RegistryValueKind.String);
    }
}
于 2013-04-26T17:20:50.833 回答
1

C# 是一门非常丰富的语言,因此无需注册表就可以轻松完成

using System.Net.NetworkInformation;

var local = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.Name == "Local Area Connection").FirstOrDefault();
var stringAddress = local.GetIPProperties().UnicastAddresses[0].Address.ToString();
var ipAddress = IPAddress.Parse(address);
于 2013-04-26T17:55:12.540 回答