iUpdateSearcher::Search 方法 (wuapi.h)

对更新执行同步搜索。 搜索使用当前配置的搜索选项。

语法

HRESULT Search(
  [in]  BSTR          criteria,
  [out] ISearchResult **retval
);

参数

[in] criteria

一个指定搜索条件的字符串。

[out] retval

包含以下项的 ISearchResult 接口:

  • 操作的结果
  • 与搜索条件匹配的更新集合

返回值

如果成功 则返回S_OK。 否则,将返回 COM 或 Windows 错误代码。

此方法还可以返回以下错误代码。

返回代码 说明
WU_E_LEGACYSERVER
如果 IUpdateSearcher 接口的 ServerSelection 属性设置为 ssManagedServerssDefault,并且计算机上的托管服务器是 Microsoft 软件更新服务 (SUS) 1.0 服务器,则无法搜索更新。
E_POINTER
参数值无效或 为 NULL
WU_E_INVALID_CRITERIA
搜索条件无效。

注解

用于 criteria 参数的字符串必须与 Search 方法的自定义搜索语言匹配。 字符串由评估以确定要返回的更新的条件组成。

每个条件指定更新属性名称和值。 如果存在一些限制,则可以将多个条件与 ANDOR 运算符连接。 支持 = (等于) 和 != (不相等) 运算符。 使用 Windows 更新 Agent (WUA) 时,!= (不相等) 运算符只能与类型条件一起使用。

搜索条件语法基于 SQL 查询表达式的 WHERE 子句。 大多数受支持的条件直接映射到更新属性。 这些更新属性类似于包含整个服务器目录的虚拟 XML 文档中的元素。 例如,如果指定搜索条件字符串“AutoSelectOnWebSites = 1”,则搜索将返回具有 AutoSelectOnWebSites 属性 且值为 VARIANT_TRUE 的所有更新。

单个条件由“Name = Value”或“Name != Value”组成,其中“Name”是受支持的条件名称之一,“Value”是字符串或整数。 ANDOR 运算符可用于连接多个条件。 但是, OR 只能在搜索条件的顶层使用。 因此,“ (x=1 且 y=1) 或 (z=1) ”有效,但“ (x=1) 且 (y=1 或 z=1) ”无效。

支持的值类型为整数和字符串。 必须以 10 为底数指定整数,负数以减号为前缀, (-) 。 字符串必须转义并用单引号括起来, (') 。 除非指定,否则所有字符串比较不区分大小写。

下表按评估优先级顺序标识了所有公共支持条件。 将来可能会向此列表添加更多条件。

条件 类型 允许的操作 说明
类型 string =, != 查找特定类型的更新,例如“驱动程序”和“软件”。
DeploymentAction string = 查找为特定操作(例如服务器管理员指定的安装或卸载)部署的更新。

“DeploymentAction='Installation'” 查找部署在目标计算机上安装的更新。 “DeploymentAction='Uninstallation'”取决于其他查询条件。

“DeploymentAction='Uninstallation'” 查找在目标计算机上为卸载而部署的更新。 “DeploymentAction='Uninstallation'”取决于其他查询条件。

如果未显式指定此条件,则联接到 AND 运算符的每组条件都意味着“DeploymentAction='Installation'”。

IsAssigned int (bool) = 查找用于自动汇报部署的更新。

“IsAssigned=1”查找由自动汇报部署的更新,具体取决于其他查询条件。 对于目标计算机上的每个本地设备,最多会返回一个分配的基于 Windows 的驱动程序更新。

“IsAssigned=0”查找不应由自动汇报部署的更新。

BrowseOnly int (bool) = “BrowseOnly=1”查找被视为可选的更新。

“BrowseOnly=0”查找不被视为可选的更新。

AutoSelectOnWebSites int (bool) = 查找 AutoSelectOnWebSites 属性具有指定值的更新。

“AutoSelectOnWebSites=1”查找标记为由Windows 更新自动选择的更新。

“AutoSelectOnWebSites=0”查找未标记为自动汇报的更新。

UpdateID 字符串 (UUID) =, != 查找 UpdateIdentity.UpdateID 属性的值与指定值匹配的更新。 可与 != 运算符一起使用,以查找没有指定值的 UpdateIdentity.UpdateID 的所有更新。

例如,“UpdateID='12345678-9abc-def0-1234-56789abcdef0'”查找等于 12345678-9abc-def0-1234-56789abcdef0 的 UpdateId 的 更新。

例如,“UpdateID!='12345678-9abc-def0-1234-56789abcdef0'”查找不等于 12345678-9abc-def0-1234-56789abcdef0 的 UpdateIdentity.UpdateID 的更新。

注意 RevisionNumber 子句可以与包含 = (等于) 运算符的 UpdateID 子句结合使用。 但是,RevisionNumber 子句不能与包含 != (不相等) 运算符的 UpdateID 子句组合使用。
 

例如,“UpdateID='12345678-9abc-def0-1234-56789abcdef0' and RevisionNumber=100” 可用于查找 Update 的更新 等于 12345678-9abc-def0-1234-56789abcdef0 且其 UpdateIdentity.RevisionNumber 等于 100 的Identity.UpdateID

RevisionNumber int = 查找 UpdateIdentity.RevisionNumber 属性的值与指定值匹配的更新。

例如,“RevisionNumber=2”查找 UpdateIdentity.RevisionNumber 等于 2 的更新。

此条件必须与 UpdateID 属性结合使用。

CategoryIDs string (uuid) contains 查找属于指定类别的更新。
IsInstalled int (bool) = 查找 目标 计算机上安装的更新。

“IsInstalled=1”查找安装在目标计算机上的更新。

“IsInstalled=0”查找未安装在目标计算机上的更新。

IsHidden int (bool) = 查找在目标计算机上标记为 隐藏 的更新。

“IsHidden=1”查找在目标计算机上标记为隐藏的更新。 使用此子句时,可以将 UpdateSearcher.IncludePotentiallySupersededUpdates 属性设置为 VARIANT_TRUE ,以便搜索返回隐藏的更新。 隐藏的更新可能被同一结果中的其他更新取代。

“IsHidden=0”查找未标记为隐藏的更新。 如果 UpdateSearcher.IncludePotentiallySupersededUpdates 属性设置为 VARIANT_FALSE,则最好在搜索筛选器字符串中包含该子句,以便将隐藏更新取代的更新包含在搜索结果中。 VARIANT_FALSE 为默认值。

IsPresent int (bool) = 当设置为 1 时,查找计算机上存在的更新。

“IsPresent=1”查找目标计算机上存在的更新。 如果更新对一个或多个产品有效,则如果为一个或多个产品安装了更新,则认为更新存在。

“IsPresent=0”查找未为目标计算机上任何产品安装的更新。

RebootRequired int (bool) = 查找需要重启计算机才能完成安装或卸载的更新。

“RebootRequired=1”查找需要重启计算机才能完成安装或卸载的更新。

“RebootRequired=0”查找不需要重启计算机即可完成安装或卸载的更新。

 

搜索的默认搜索条件如下所示:

( IsInstalled = 0 and IsHidden = 0 )

若要使用设置为 VARIANT_TRUE) 的 UpdateSearcher.IncludePotentiallySupersedUpdates 属性 查找 ( 的所有隐藏更新,请使用以下条件:

 ( IsHidden = 1 )

要求

   
最低受支持的客户端 Windows XP、Windows 2000 Professional SP3 [仅限桌面应用]
最低受支持的服务器 Windows Server 2003、Windows 2000 Server SP3 [仅限桌面应用]
目标平台 Windows
标头 wuapi.h
Library Wuguid.lib
DLL Wuapi.dll

另请参阅

IUpdateSearcher