2

次のVBスクリプトは、ネットワークアダプタ名を変更するために機能すると言われています。しかし、私はこれを同じことを行うことができるac#アプリケーションに変換しようとして明らかに困難な時間を過ごしています。私が直面していると思われる問題は、への呼び出し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#でこのようなことをどのように行いますか?

4

3 に答える 3

1

レジストリ構造がどのように機能するかを知っていれば、レジストリを介してNICの名前を簡単に変更できます。

開くパスを見つけるには、NetworkAdaptersGUIDが必要です。ネットワークアダプタのGUIDを取得するには、最初にWMIの「Win32_NetworkAdapter」クラスにクエリを実行することをお勧めします。特定のアダプタを識別するために必要な他のすべてのプロパティとともに、GUIDプロパティがあります。

レジストリパスにこのGUIDがあります:{4D36E972-E325-11CE-BFC1-08002BE10318}このGUIDについては、次の
リンクにアクセスしてください: 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", "<DesiredAdapterName>");

設計上、WindowsUIは重複するNIC名を許可しません。ただし、レジストリを介してNIC名の重複を強制することができます。テストを行いましたが、名前が重複していても重大な影響はないようです。Windowsはまだ正常に機能しているようです。重複防止の名前ロジックを組み込んでいない場合は、NIC名に対するスクリプトに注意する必要があります。

一意性を作成するには、WMIクエリに関連付けられたアダプターインデックスプロパティを使用できます。

于 2012-05-30T18:40:28.530 に答える
0

System.Managementアセンブリを使用して、このクラスを使用できます。

こちらのサンプルに従ってください-http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/727c8766-8189-4ad6-956d-958e52b97c05/

于 2012-05-24T21:12:29.957 に答える
0

必要な機能を備えたVB.NETdllを作成し、参照して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

印刷します:

ローカルエリアでの接続

通信網

于 2012-05-24T21:31:49.467 に答える