Каково ссылочное пространство имен Win32_NetworkAdapter в визуальной студии C # express? - PullRequest
3 голосов
/ 24 февраля 2012

В настоящее время я пишу небольшую программу, которая должна удаленно управлять некоторыми устройствами (их сервисом и оборудованием, например, портом Lan). Я погуглил и прочитал много информации о WMI, и теперь я пытаюсь сделать свою программу.

Но я не смог найти эталонное пространство имен класса Win32_NetworkAdapter. Я уже импортировал в проект System.Management и Microsoft.Win32, но SDK все равно сказал мне, что Win32_NetworkAdapter не найден.

Что мне здесь не хватает?

PS. Я использую Windows XP, VS Express 2010 Express для разработчиков.

Спасибо за вашу помощь.


Вот мой код атм:

string manage = "SELECT * From Win32_NetworkAdapter";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
ManagementObjectCollection collection = searcher.Get();

foreach (ManagementObject obj in collection)
{
    if (obj["Name"].ToString() != null)
    {
        if (obj["Name"].ToString() == "Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC")
        {
            obj.InvokeMethod("Disable", null);
            textBox3.Text += "finished";
        }
    }
}

Я запустил его в режиме отладки и обнаружил, что в свойствах (Classpath, Options, Path, Scope) объекта obj отображается сообщение об ошибке:

Оценка функции отключена, поскольку предыдущая оценка функции время вышло. Вы должны продолжить выполнение для включения функции оценка.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

WMI "классы" не являются классами в смысле C #. Они выбрали это существительное, потому что они напоминают класс. У них есть имя, свойства и методы, как в классе C #.

Под капотом находится COM-интерфейс. Который также объясняет предупреждение отладчика, COM-интерфейсы имеют сходство потоков. Отладчик оценивает выражения наблюдения в отдельном потоке, потоке отладчика. Что может привести к взаимоблокировке, когда у вас активна точка останова, поток, который обращается к интерфейсу, останавливается отладчиком. Это не настоящая проблема, просто неудобство.

Непонятно, какие у вас проблемы, вы не сможете получить это предупреждение отладчика, если запрос Win32_NetworkAdapter не вернет что-то . Возможно было бы неправильно ввести имя, обратите внимание, что ваш код будет работать только на другом компьютере случайно. И WMI имеет тенденцию быть ненадежным, он сильно зависит от драйверов, чтобы вернуть информацию, и драйверы не созданы равными. Их качество примерно пропорционально сумме денег, которые вы потратили на оборудование. Безусловно, лучший способ экспериментировать и тестировать запрос WMI - это утилита WMI Code Creator . Он позволяет вам выполнять произвольные запросы, даже имеет возможность автоматически генерировать необходимый вам код C #. Настоятельно рекомендуется.

1 голос
/ 24 февраля 2012

Вы либо используете их, как предложено @Wiktor Zychla, либо генерируете строго типизированный класс C #, используя mgmtclassgen.exe .Также см. Этот ТАК вопрос / ответ для получения дополнительной информации и ссылок на эту тему.

0 голосов
/ 24 февраля 2012

Вы не используете классы WMI в C # в качестве классов.Вместо этого вы передаете имена классов в методы запросов WMI:

var search = new ManagementObjectSearcher( "SELECT * FROM Win32_NetworkAdapter" );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...