Как установить время ожидания для запросов WMI? - PullRequest
9 голосов
/ 15 июня 2011

У меня есть приложение .NET, которое выполняет запросы WMI на всех компьютерах домена, чтобы найти вошедшего в систему пользователя;он пингует каждый компьютер, чтобы выяснить, подключен он или нет, а затем выполняет фактический запрос.

Фрагмент кода:

try
{
    string loggedonuser = null;

    string computername = "ComputerToQuery";

    ConnectionOptions co = new ConnectionOptions();

    co.Username = "DOMAIN\MyUser";
    co.Password = "MyPassword";

    co.Impersonation = ImpersonationLevel.Impersonate;
    co.Authentication = AuthenticationLevel.Default;

    ManagementPath mp = new ManagementPath(@"\\" + computername + @"\root\cimv2");

    ManagementScope ms = new ManagementScope(mp,co);

    ms.Connect();

    ObjectQuery oq = new ObjectQuery("SELECT username FROM Win32_ComputerSystem");

    ManagementObjectSearcher mos = new ManagementObjectSearcher(ms,oq);

    foreach(ManagementObject mo in mos.Get())
        loggedonuser = (String) mo["username"];
}
catch(Exception e)
{
    // Handle WMI exception
}

Проблема: иногда запрос WMI зависает на неопределенное время.*

Как мне установить тайм-аут на него?

Ответы [ 2 ]

12 голосов
/ 15 июня 2011

ManagementObjectSearcher имеет свойство Options: один из доступных вариантов: Timeout, типа TimeSpan:

Получаетили устанавливает тайм-аут для применения к операции.Обратите внимание, что для операций, которые возвращают коллекции, этот тайм-аут применяется к перечислению через результирующую коллекцию, а не к самой операции (для последней используется свойство ReturnImmediately).Это свойство используется для указания того, что операция должна выполняться полусинхронно.

6 голосов
/ 15 июня 2011

Попробуйте co.Timeout = new TimeSpan(0, 0, 30);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...