Ошибка ManagementObjectSearcher - PullRequest
0 голосов
/ 27 марта 2012

Некоторые из наших клиентов сообщают нам, что в некоторых случаях появляется следующая ошибка:

System.Management.ManagementException: Błąd dostawcy.
в System.Management.ManagementException.ThrowWithExtendedInfo (ManagementStatus ERRORCODE)
в System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext ()

Ошибка возникает при попытке перебрать коллекцию, возвращаемую методом Get () объекта System.Mamangment.ManagementObjectSearcher.

Это код моего метода:

private bool PrinterExists(string printerName)
{
    bool retVal = false;
    SelectQuery q = new SelectQuery("select caption from win32_printer");
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(q))
    {
        foreach (ManagementObject printer in searcher.Get())
        {
            if(printer["Caption"].ToString() == printerName)
            {
                retVal = true;
                break;
            }
        }
    }
    return retVal;
}

Кажется, проблема возникает только в Windows XP. Единственный известный мне обходной путь - реконструкция базы данных WMI. Иногда это помогает, но, к сожалению, не всегда.

Может кто-нибудь сказать мне, в чем причина этой ошибки и как я могу ее исправить?

1 Ответ

0 голосов
/ 27 марта 2012

Существует множество возможных причин, по которым вы могли бы получить ошибку при перечислении коллекции WMI, в том числе то, что у вас нет прав для просмотра некоторых свойств объекта.Вы можете проверить возможность разрешений, запустив приложение от имени администратора и посмотрев, исчезла ли ошибка.

Независимо от основной причины, вы можете попытаться изменить WQL-запрос, указав в нем имя принтера, который вы ищете.Если WMI выполняет перечисление вместо вас, это может обойти проблемные пункты.

SelectQuery q = new SelectQuery(
    "select caption from win32_printer where Caption='Fax' ");
bool found = new System.Management.ManagementObjectSearcher(q).Get().Count > 0;

Если это не сработает, поместите сравнение Caption в обработчик исключений и игнорируйте принтеры, которые генерируют исключения.

Конечно, если основная проблема заключается в том, что вы пытаетесь найти принтеры, на которые у вас нет прав доступа, вам нужно настроить приложение так, чтобы оно работало с повышенными разрешениями.

...