问题标签 [wuapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 远程 WUApiLib 需要启用什么
需要在远程 PC 上启用什么才能远程使用 WUApiLib?我有这段代码返回错误 80070005
c++ - 如何丢弃 IUpdateSearcher::BeginSearch
我将使用Windows Update Agent枚举未安装的更新。我有一个问题。这是一种丢弃/停止BeginSearch方法(搜索过程)的方法。我试图用EndSearch停止搜索过程,但它并没有停止它。谢谢。
c++ - IUpdateSearcher::BeginSearch 无效指针错误
我将使用BeginSearch搜索更新。ISearchCompletedCallback的实现方式如下:
我还创建了另一个类(枚举器),我在其中放置了启动异步搜索的方法和一些我需要在我的程序中使用的私有数据成员:
我的问题是,当我使用方法BeginSearch时,我收到错误“无效指针”(请参阅方法 Enumerator::AsynchSearch)。看起来指针CComPtr<ISCC> iscc_
已被错误地初始化。我应该以哪种方式初始化CComPtr<ISCC> iscc_
指针?谢谢。
c++ - VBScript 和 C++ 之间的 wuapi 无法解释的差异
尝试使用 wuapi 查询 Windows 7 Enterprise SP1 的更新时,附加的 VBScript 示例返回的结果与附加的 C++ 示例不同。VBScript 包括 Microsoft Office 的更新,这正是我想要的。在我的研究过程中,我发现了 IUpdateSearcher3 接口,它公开了 SearchScope,这似乎是我需要使用的。但是,我在创建界面时遇到了困难。我的问题是,为什么两个版本的结果不同,如何使 C++ 版本包含 Office 检查以与 VBScript 版本保持一致?
附上示例代码和输出。请注意,C++ 版本不包括来自 VBScript 输出的 Office 更新:
VBScript 示例:
VBScript 输出:正在搜索更新...
C++ 示例:
C++ 输出:
c++ - 停止异步 ISearchJob 的正确方法
我将使用WUA API并以这种方式开始执行异步更新搜索:
当我需要停止我的程序,但ISearchJob尚未完成时,我使用以下代码:
通常这段代码可以工作,但有时它会挂起pUpJob_->CleanUp();
,我无法正确停止我的程序。
所以我的问题是:
- 停止异步搜索作业以进行更新的正确方法是什么?
- 我也误解了ISearchJob::CleanUp和ISearchJob::RequestAbort之间的区别以及如何使用此方法正确停止异步搜索?
- 这些方法应该一起使用还是单独使用?
c# - 未找到 IUpdateInstaller4::Commit
我正在尝试使用适用于 Windows 10 的新 WUAPI IUpdateInstaller4 的方法。我在这里找到了它:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt694207(v=vs.85).aspx
但是我尝试过的所有方法都失败了:
创建动态对象失败,“无定义异常”。例子:
新类型库的创建不包含接口。
任何帮助或提示都会很棒。
c# - 无法将 COM 对象转换为接口类型'WUApiLib.UpdateSession c#
我正在使用 WUApiLib.dll,并编写一个程序来检测可以下载和安装哪些更新。
大多数时候它工作得很好,但在某些情况下,我在转换到 UpdateSession 时遇到错误:
出现以下错误:
我没有配置防火墙,正如我看到人们在其他主题中关于类似错误的说法,但我不知道为什么会收到此错误。知道问题出在哪里,我该如何解决?
windows - 为什么 IUpdateSession::WebProxy 不能在 Windows 10 上运行?
我有一些使用 Windows Update API 执行 Microsoft Update 扫描的内部代码。因为有些客户端没有直接的 Internet 访问权限,所以我明确设置该WebProxy
属性指向我们的本地代理服务器。在测试期间(在 Windows 7 上),这似乎工作得很好。现在我在 Windows 10 上测试它(见脚注 1),似乎代理设置被忽略了。
Windows Update 客户端在 Windows 10中进行了重大修改,因此这可能是新版本客户端中的错误或未记录的限制,但另一方面,我以前使用 COM 的经验很少,所以我可能做错了什么.
观察结果,使用下面发布的测试代码:
代码在 Windows 7 上按需要运行,无论它在什么安全上下文中运行,也无论客户端是否具有直接 Internet 访问权限和/或在用户的 Internet 设置中配置的代理服务器。
该代码也适用于 Windows 10,前提是客户端可以直接访问 Internet。
如果客户端无法直接访问 Internet,但运行它的用户在其 Internet 设置中配置了合适的代理服务器,则该代码主要适用于 Windows 10。(见脚注 2。)
如果客户端没有直接的 Internet 访问权限并且运行它的用户没有配置合适的代理,则该代码在 Windows 10 上不起作用。它没有连接到代码中指定的代理,而是尝试连接到一系列外部 IP 地址;一旦所有这些连接尝试最终超时,它会在显示的行上返回 0x80072ee2, ERROR_INTERNET_TIMEOUT。(通过省略设置代理服务器的代码部分,我可以在 Windows 7 上获得非常相似的行为。)
此外,如果我故意将代码中的代理 URL 更改为指向不存在的服务器,则代码在 Windows 7 上停止运行,如预期的那样,但在 Windows 10 上的行为没有改变。因此,看起来 Windows 更新确实只是忽略了该WebProxy
属性。(正在设置属性;我可以从IUpdateSession
对象中读取它。)
更改传递优化下载模式似乎没有帮助。我已经尝试了通过组策略提供的所有不同模式。在代理 URL 中添加尾部斜杠会破坏 Windows 7 的代码,对 Windows 10 没有任何影响。使用纯 DNS 名称而不是 URL 在 Windows 7 上有效,但在 Windows 10 上没有任何区别。
由于代码最终旨在成为系统服务的一部分和/或远程运行,因此在用户级别配置代理设置不是一个理想的选择,尽管如果没有其他解决方案可用,我可能会依赖它。
这是我一直在测试的代码,是原始代码的缩减版。测试代码实际上不会处理结果(如果有的话),因为问题发生在该点之前。我隐藏了我们代理服务器的真实 DNS 名称,但 URL 是显示的形式。任何想要在他们自己的环境中测试代码的人当然都需要将它指向他们自己的代理。
有什么办法可以让 Windows 10 上的这项工作与 Windows 7 上的工作方式相同吗?
(1)我运行的是Windows 10 LTSB 2016,这个和Windows 10 1607版基本相同,也就是Windows 10 Anniversary Update。我的大多数客户都没有 3 月份的更新,但其他方面都是最新的。我还确认在安装了 3 月更新的客户端上仍然会出现问题。
(2) 在测试过程中,使用用户配置的代理有两次失败,都是在新重装的机器上;一旦它开始工作,它就会继续工作。在这种情况下,扫描仍会尝试连接到各种外部 IP 地址,但这些连接超时的事实不会导致扫描失败。我怀疑这一切都与传递优化下载模式有关,但我仍在试验。
附录:运行代码的用户帐户在其 Internet 设置中配置了合适的代理服务器的情况仅在代码以交互方式运行时有效。在非交互式上下文中,例如服务或计划任务,这不起作用。目前,在我看来,除非您可以直接访问 Internet,否则在 Windows 10 机器上从服务访问 Microsoft Update 是不可能的。
c# - 使用 C# 的 Windows 更新 API 未找到任何已安装的更新
我有许多 Windows 7 PC 需要使用 C# 控制台应用程序中的 Windows 更新 API 修补特定的 Windows 更新。API 需要搜索已安装的更新并报告是否已安装,如果未安装则执行安装。
在虚拟 PC(Windows 7 Professional Hyper-v 客户端)上进行测试时,我遇到了类似于目标 PC(Windows 7 Embedded)的情况,其中以下代码返回(非常快速且无任何异常)0 更新。我知道这是错的。事实上,它甚至会在我安装 .msu 更新后返回。
代码:
现在是有趣的部分。如果我从控制面板打开 Windows 更新并单击“检查更新”,它会关闭一段时间,然后回来安装一堆更新。此时,如果我运行上述代码,它会按预期工作并报告超过 200 个已安装更新。
搜索更新的手动过程似乎会启动/重新启动某些服务和/或其他进程,但是,我正在努力弄清楚我需要对系统做什么才能使其进入正确状态。我希望答案将是使用一组参数启动服务 x 或进程 y 的简单案例,但是哪个?
我尝试过但没有改变行为的一些(不是全部)事情:
- 启动 BITS 服务,重新启动 Windows 更新服务
- 尝试使用各种开关启动 wuauclt.exe( 在评论中记录)
在机器处于代码正常运行的状态下(在我手动运行 WU 之后),我注意到在运行上述代码时进程 wuauclt.exe 似乎启动了。当它处于目标状态时(在我手动运行 WU 之前), wuauclt.exe 不会启动,并且我无法手动启动它,我怀疑这是一个很大的线索。
另一个线索是我手动运行 Windows 更新之前的状态。在控制面板窗口更新看起来像这样:
通过该方法运行 WU 并安装更新后,机器处于代码按预期运行的状态,WU 如下所示:
总而言之,我需要这个过程来自动安装更新。如果我检测到 0 个已安装的更新,我知道机器处于特定状态,所以我需要启动/重新启动一些进程和服务(以编程方式)以使机器在运行我的代码之前进入正确的状态。知道要运行/重启什么是这个问题的本质。
c# - C# - 从 WUAPI 获取全貌
我正在尝试在许多不同的机器上收集 Windows 更新的准确图片,特别是 KB 安装。我已经尝试了许多不同的代码,我发现这些代码分散在各处,但我似乎仍然无法准确地描绘出所安装的内容。准确地说,我的意思是当我使用 Windows UI 检查机器上的 Windows 更新历史记录时,我收集的任何内容似乎都是显示的内容的一个子集!似乎无法弄清楚这一点!
这是我尝试过的一些事情;
我还尝试在同一例程中添加代码以收集捆绑更新字段中的所有更新,如下所示;
我还尝试查看更新历史记录,但这为我提供了另一组数据 - 仍然不完整!
我还检查了一些利用注册表的代码,但从我读过的内容来看,这不是正确的做事方式。在这一点上,我正在执行许多不同的查询,搜索“KB”引用的条目并构建一个列表并删除重复项,但我仍然没有得到我在屏幕上看到的相同列表!即使这确实有效,也可能不是正确的方法——我觉得我一定错过了一些东西。
最后,我试图获取有关上次检查和安装更新的时间的信息——即使这与显示的内容不匹配。我用下面的代码做到了这一点;
有没有人在这方面有一些专业知识?真的很想把这件事做好!
感谢您花时间阅读!
尊敬的,马歇尔