C # Обновление имени сетевого адаптера частично работает (WinReg хорошо, ipconfig плохо) - PullRequest
0 голосов
/ 16 мая 2018

С учетом следующей функции:

private void UpdateNetworkAdapterName(string pnpDevID, string oldAdpterName, string newAdapterName)
    {
        string guid = "";

        ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter");
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
        ManagementObjectCollection queryCollection = searcher.Get();

        foreach (ManagementObject m in queryCollection)
        {
            if (string.Equals(m["PNPDeviceID"].ToString(), pnpDevID))
            {
                guid = m["GUID"].ToString();
                break;
            }
        }

        RegistryKey regKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, Environment.MachineName, RegistryView.Registry64);
        regKey = regKey.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + guid + "\\Connection", true);
        regKey.SetValue("Name", newAdapterName);

        bool successful = false;
        foreach (NetworkInterface netAd in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (netAd.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
            {
                if (string.Equals(netAd.Name, newAdapterName))
                {
                    Console.WriteLine($"Successfully updated network adapter from {oldAdpterName} to {newAdapterName}");
                    successful = true;
                    break;
                }
            }
        }
        if (!successful)
        {
            Console.WriteLine($"Failed to updated network adapter from {oldAdpterName} to {newAdapterName}");
        }
    }

Это успешно обновило правильные данные «Имя» адаптера в реестре Windows и правильное имя адаптера в Центре управления сетями и общим доступом. Однако внутренне я получаю сообщение об ошибке из кода (хотя исключений не было (удален код обработки исключений для удобства чтения)), и выполнение ipconfig показывает, что имя adpater не было обновлено.

Среда - Windows10 (должна также работать в Windows7), обе 64-битные архитектуры, приложение построено как 32-битное приложение.

Есть идеи, что происходит? На данный момент я в полной растерянности.

Заранее спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

Просто понял, что у меня есть вся информация, чтобы просто выполнить команду netsh:

netsh interface set имя интерфейса = "" newname = ""

...