c++ - 使用 wuapi 获取 Windows 系统更新

标签 c++ windows winapi windows-update

在我的应用程序中,我显示 Windows 计算机是否有可用更新,该更新应与“Windows 更新”设置相同。我正在使用这样的代码,通常可以工作。

#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 更新”设置页面中没有。我检查了日志,有一些更新被标记为“不完整/无效”,因此未显示在“Windows 更新”设置页面中,但此代码由于某种原因获取了它们。我认为问题在于使用了不正确的搜索查询。也许
“IsInstalled=0 和 IsHidden=0” 还不够。是否可以准确地知道“Windows 更新”设置使用什么查询来显示更新并在我的应用程序中使用相同的查询?

最佳答案

解决方案是将“IsAssigned=1”添加到条件中。

关于c++ - 使用 wuapi 获取 Windows 系统更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60951327/

相关文章:

c++ - c++中比较vector等随机访问迭代器时,<>的比较内容是什么?

c++ - 如何将文件传递给函数?

c++ - 有没有办法在 ".O"文件中创建一个没有 main() 函数的 ".C"文件

linux - 将 laravel 项目部署到服务器?

c++ - 基本 dll 地址总是不同且哈希不匹配

oracle - 将密码包含在 {} 中时,SQLDriverConnect 有时会失败

c++ - Win32 C++ 可以通过过程发送额外信息

c++ - 如何在 Windows 8 现代应用程序上从视频流中抓取帧?

c++ - 销毁具有指针值的 map 的正确方法

linux - WebSphere MQ Windows 客户端到 Linux 服务器用户权限