проблема с WMI
От: KellyLynch  
Дата: 26.12.05 18:40
Оценка:
У меня есть трудновоспроизводимая проблема с Windows Management Instrumentation (WMI):

Я написал сервис, в котором есть несколько потоков. Два из них работают с WMI следующим образом:

— создание COM-компонента CLSID_WbemLocator;
— вызов IWbemLocator::ConnectServer()
— получение информации через полученный объект IWbemServices.

Проблема состоит в том, что иногда (редко) мой сервис зависает. Анализ оставшихся от него log-ов показал, что зависание происходит прммерно в момент, когда оба вышеупомянутых потока вызвали IWbemLocator::ConnectServer().

Почему это происходит? Ведь каждый из потоков использует СОБСТВЕННЫЙ экземпляр COM-объекта, независимы от того, что используется другим потоком. И можно ли как-то эту проблему обойти?
Re: проблема с WMI
От: KellyLynch  
Дата: 27.12.05 09:56
Оценка:
В дополненик могу сказать, что код выглядит примерно так:


::CoInitialize(NULL);
CComPtr<IWbemLocator> spIWbemLocator;
hRes = ::CoCreateInstance(CLSID_WbemLocator,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
reinterpret_cast<void**>(&spIWbemLocator));

CComPtr<IWbemServices> spIWbemServices;
hRes = spIWbemLocator->ConnectServer( _bstr_t(L"\\\\.\\root\\cimv2"),
NULL, // User name
NULL, // Password
NULL, // Locale
0, // Security flags
NULL, // Authority
NULL, // Wbem context
&spIWbemServices // Namespace
);

То есть каждый поток работает в своём STA.

Посмотреть в отладчике, что же именно поучается, я не могу – зависание случается редко.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.