我想阅读并修改NetworkAddress的注册表项值。它在注册表中的路径是:
HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \控制\类{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);
我已经尝试过这段代码并且它给了我这个例外:对象引用未设置为对象的实例。如何解决此问题?请帮助我,谢谢你。
答案 0 :(得分:2)
您收到异常,因为工厂方法无法在指定位置找到子密钥并返回null
。
尽管您的子密钥地址完全有效,但由于您使用的是Registry.LocalMachine.OpenSubKey
,因此您实际上是在子密钥地址中指定HKEY_LOCAL_MACHINE
两次。解决方案是将子键路径更改为:
SYSTEM \ ControlSet001 \控制\类{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);
}
}
答案 1 :(得分: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);