Получайте Windows системных обновлений, используя wuapi - PullRequest
1 голос
/ 31 марта 2020

В моем приложении я показываю, есть ли на компьютере windows доступные обновления, которые должны совпадать с настройками "Windows Update". Я использую такой код, который обычно работает.

#include "stdafx.h"
#include <wuapi.h>
#include <iostream>
#include <ATLComTime.h>
#include <wuerror.h>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hr;
    hr = CoInitialize(NULL);

    IUpdateSession* iUpdate;
    IUpdateSearcher* searcher;
    ISearchResult* results;
    BSTR criteria = SysAllocString(L"IsInstalled=0 and IsHidden=0");

    hr = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (LPVOID*)&iUpdate);
    hr = iUpdate->CreateUpdateSearcher(&searcher);

    wcout << L"Searching for updates ..."<<endl;
    hr = searcher->Search(criteria, &results); 
    SysFreeString(criteria);

    //...
}

Моя проблема в том, что на некоторых машинах этот код дает результат, что есть доступные обновления, но на странице настроек "Windows Update" нет , Я проверил журналы, есть некоторые обновления, которые помечены как «неполные / недействительные», поэтому они не отображаются на странице настроек «Windows Обновление», но этот код получает их по некоторым причинам. Я думаю, что проблема заключается в использовании неправильного поискового запроса. Может быть,
"IsInstalled=0 and IsHidden=0" недостаточно. Можно ли точно узнать, какие параметры запроса "Windows Update" используются для отображения обновлений и использовать тот же запрос в моем приложении?

1 Ответ

0 голосов
/ 31 марта 2020

Решение состоит в том, чтобы добавить «IsAssigned = 1» к критериям.

...