如何在c#中更改NetworkAdapter的名称?

人们声称以下VB脚本适用于更改网络适配器名称。 然而,我正在努力将其转换为可以做同样事情的ac#appliaction。 我似乎面临的问题是对NetworkInterface.Name调用是只读的。

 Option Explicit Const NETWORK_CONNECTIONS = &H31& Dim sOldName= WScript.Arguments(0) Dim sNewName= WScript.Arguments(1) Dim objShell, objFolder, colItems, objItem Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(NETWORK_CONNECTIONS) Set colItems = objFolder.Items For Each objItem in colItems If objItem.Name = sOldName Then objItem.Name =sNewName End If Next 

我发现这更能解释一下: http : //blogs.technet.com/b/heyscriptingguy/archive/2005/05/11/how-can-i-rename-a-local-area-connection.aspx 。

好的,因此存在存储NIC名称的特殊文件夹,您可以通过SHELL绑定到这些文件夹来访问这些文件夹。 你怎么在c#做这样的事情?

如果您知道注册表结构的工作原理,则可以通过注册表轻松更改NIC的名称。

您将需要NetworkAdapters GUID才能找到要打开的路径。 要获取网络适配器GUID,我建议首先查询WMI“Win32_NetworkAdapter”类。 有一个GUID属性以及标识特定适配器所需的所有其他属性。

您将在注册表路径中注意到此GUID:{4D36E972-E325-11CE-BFC1-08002BE10318}
访问链接以获取相关信息: http : //technet.microsoft.com/en-us/library/cc780532(v = ws.10).aspx

 string fRegistryKey = string.Format(@"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{0}\Connection", NIC_GUID); RegistryKey RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, @"\\" + Server.Name); RegistryKey = RegistryKey.OpenSubKey(fRegistryKey, true); //true is for WriteAble. RegistryKey.SetValue("Name", ""); 

根据设计,Windows UI将不允许重复的NIC名称。 但是,您可以通过注册表强制重复NIC名称。 我们已经完成了测试,似乎没有任何重复名称的重要影响。 Windows似乎仍然运行良好。 如果不包含反复制的名称逻辑,您只需要警惕针对NIC名称的脚本编写。

要创建唯一性,可以使用与WMI查询关联的适配器索引属性。

您可以使用System.Management程序集并使用此类 。

点击此处的示例 – http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/727c8766-8189-4ad6-956d-958e52b97c05/

您还可以使用所需的function创建一个VB.NET DLL,并从C#代码中引用它。

这是一个控制台应用程序演示代码(我测试过,它的工作:)

 Option Explicit On Module Module1 Sub Main() Const NETWORK_CONNECTIONS = &H31& Dim sOldName = "Local Area Connection" Dim sNewName = "Network" Dim objShell, objFolder, colItems, objItem objShell = CreateObject("Shell.Application") objFolder = objShell.Namespace(NETWORK_CONNECTIONS) colItems = objFolder.Items For Each objItem In colItems Console.WriteLine(objItem.Name) If objItem.Name = sOldName Then objItem.Name = sNewName End If Console.WriteLine(objItem.Name) Next End Sub End Module 

打印出来:

本地连接

网络