я использую IUpdateSession
а также IUpdateSearcher
в попытке получить список доступных обновлений для системы Windows.
hr = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (void**)&pUpdateSession);
if (FAILED(hr) || pUpdateSession == NULL)
{
return;
}
hr = pUpdateSession->CreateUpdateSearcher(&pUpdateSearcher);
if (FAILED(hr) || pUpdateSearcher == NULL)
{
return;
}
pUpdateSearcher->put_Online(VARIANT_FALSE);
pUpdateSearcher->put_CanAutomaticallyUpgradeService(VARIANT_FALSE);
pUpdateSearcher->put_IncludePotentiallySupersededUpdates(VARIANT_FALSE);hr = pUpdateSearcher->Search(BSTR(L"IsInstalled=0 AND IsHidden=0"), &type);
if (FAILED(hr) || type == NULL)
{
return;
}
else
{
... Print results etc. etc.
}
Это прекрасно работает, когда у вас есть одно (или небольшое количество) обновлений. При тестировании на новой машине с 109 доступными обновлениями ->Search()
вызов вступает во владение 10 минут обрабатывать.
Это нормальное поведение или что-то можно сделать для улучшения производительности?
Заранее благодарю за любую помощь.
Другие решения для получения списка доступных обновлений также приветствуются.
Задача ещё не решена.
Других решений пока нет …