2013-04-26 59 views
1

我想讀取和修改我的NetworkAddress的註冊表項值。它在註冊表路徑是:如何設置或從註冊表中獲取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); 

我曾嘗試此代碼,它給我這個異常:未設置爲一個對象的實例對象引用。我該如何解決這個問題?請幫助我,謝謝。

+1

因爲工廠方法找不到指定位置的鍵並返回'null',所以您正在接收異常。 – 2013-04-26 17:13:55

+0

是的我知道,但關鍵是現有的位置,並確保我在正確的路徑我從註冊表直接複製目的地 我認爲這是一個權限問題? – Yasser 2013-04-26 17:24:06

+0

如果您沒有足夠的權限訪問註冊表項,則會拋出System.Security.Security異常。我認爲你需要提升特權才能寫入LOCAL_MACHINE關鍵配置單元。 – 2013-04-26 17:26:35

回答

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); 
    } 
} 
+0

非常感謝你的工作 – Yasser 2013-04-26 17:26:45

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);