IUpdateSearchers BrowseOnly = 1 возвращает (ошибочно) 0

Я пытаюсь собрать не установленные, необязательные обновления Windows для компьютера через IUpdateSearcher, аналогично этот вопрос.

Документация IUpdateSearchers утверждает, что обновления могут быть отфильтрованы по критерию BrowseOnly. Тем не менее, это не похоже на работу для меня, этот код:

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

ISearchResult *pResult;
IUpdateSession *pSession;
IUpdateSearcher *pSearcher;

CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (LPVOID*)&pSession);
pSession->CreateUpdateSearcher(&pSearcher);

LONG updateSizeT, updateSizeB1, updateSizeB0;
IUpdateCollection *pCollection;

BSTR criteria = SysAllocString(L"IsInstalled=0");
pSearcher->Search(criteria, &pResult);
pResult->get_Updates(&pCollection);
pCollection->get_Count(&updateSizeT);

SysFreeString(criteria);
criteria = SysAllocString(L"IsInstalled=0 and BrowseOnly=0");
pSearcher->Search(criteria, &pResult);
pResult->get_Updates(&pCollection);
pCollection->get_Count(&updateSizeB0);

SysFreeString(criteria);
criteria = SysAllocString(L"IsInstalled=0 and BrowseOnly=1");
pSearcher->Search(criteria, &pResult);
pResult->get_Updates(&pCollection);
pCollection->get_Count(&updateSizeB1);

SysFreeString(criteria);
wcout << L"Total: " << updateSizeT << endl
<< L"BrowseOnly=0: " << updateSizeB0 << endl
<< L"BrowseOnly=1: " << updateSizeB1 << endl;

Производит следующий вывод:

Total: 86
BrowseOnly=0: 49
BrowseOnly=1: 0

Кроме того, что код ужасен, что я делаю не так?
Более того, проверка панели управления Центра обновления Windows показывает, что должно быть 0 необязательных (BrowseOnly = 0) обновлений, но коды возвращают 49.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]