【问题标题】:How to programmatically detect if Windows 8.1 Update is installed如何以编程方式检测是否安装了 Windows 8.1 更新
【发布时间】:2014-06-14 14:06:44
【问题描述】:

我想从 C# 应用程序中检测是否安装了最新的 Windows 8.1 Update (KB 2919355)

我在微软的任何网站上或通过谷歌都找不到任何可以说明如何做到这一点的东西。

谢谢!

【问题讨论】:

  • 它不会增加 System.Environment.OSVersion 中的修订吗?
  • This 可能会有所帮助。
  • 你为什么想知道?我问是因为如果您发现您的程序依赖于 Windows 8.1 更新中更改的行为,那么您可以测试该特定行为(这通常(并非总是)比硬编码版本检查更好的方法)。
  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion 查询 BuildLabEx 值并解析第二个数字。如果该值大于 17031,则您已安装更新。

标签: c# windows-8.1


【解决方案1】:

该更新实际上是“汇总”或其他单独的较小更新的集合。如果你去Knowledge base page for the update并向下滚动到“文件信息”你可以看到更新实际上是以下其他更新的组合。

  • KB2919442
  • KB2919355
  • KB2932046
  • KB2937592
  • KB2938439
  • KB2934018

然后,您需要检查是否应用了以上列出的所有更新或应用了单个主更新。我不确定如何仅在 C# 中执行此操作,但通过命令行您可以通过控制台命令执行此操作

wmic qfe get hotfixid | find "KB2919355"

【讨论】:

  • 有趣的是我们的列表不匹配。此外,从链接页面:“您还可以使用 DISM 命令来验证更新的安装或卸载。”
  • @BenVoigt DISM 需要提升提示符,WMI 方法可以在不提升提示符的情况下执行此操作(我删除了有关检查 DLL 版本的部分,因为使用 DISM 或 WMI 是一种更好的方法)。跨度>
【解决方案2】:

在 Windows Update 上线之前,我从 MSDN 下载安装了 Windows 8.1 更新。它作为一系列带有自述文件的 MSU 文件分发。如果您选择检测它们的存在,自述文件中的更新列表可能会很有用。

Windows 8.1, Windows Server 2012 R2, Windows RT 8.1 Update

Recommended Install Order
1.  KB2919442
2.  KB2919355
3.  KB2932046
4.  KB2937592
5.  KB2938439
6.  KB2949621

【讨论】:

  • 第 6 个 KB 编号不指向 a valid KB page,可能是自述文件错误,它确实在 KB2919355 更新的 KB 页面上显示了最后一个包的不同编号(但是 visiting it 重定向您回到 KB2919355 页面)。
  • @ScottChamberlain:来自 MSDN 的更新分发包括 Windows8.1-KB2949621-v2-x64.msuGoogle 表明该更新可能仅适用于服务器 SKU。
【解决方案3】:

这可能是罪魁祸首:

Operating system version changes in Windows 8.1 and Windows Server 2012 R2

表现形式

在 Windows 8.1 中,GetVersion(Ex) API 已被弃用。这意味着虽然您仍然可以调用 API,但如果您的应用程序没有专门针对 Windows 8.1,您将获得 Windows 8 版本控制 (6.2.0.0)。

解决方案

为了以 Windows 8.1 为目标,您需要在源文件中包含应用清单或包含 _NT_TARGET_VERSION=$ (_NT_TARGET_VERSION_LATEST)。

所需清单内容的模式详细信息在文章中给出。

【讨论】:

  • 他不是试图检测 8.1 与 8.0,而是检测 8.1 有补丁和没有补丁的 8.1 之间的区别。 (但是补丁可能会也可能不会改变(我没有检查)windows版本号中的内部版本号,所以它可能仍然有效)
猜你喜欢
  • 2018-12-24
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多