You need to enable JavaScript to run this app. C#中对WMI查询Win32_QuickFixEngineering结果排序以获取最新Windows更新
优惠活动
大模型
产品
解决方案
定价
更多

C#中对WMI查询Win32_QuickFixEngineering结果排序以获取最新Windows更新

解决方法

WMI使用的WQL查询语言本身就支持ORDER BY排序语法,你不需要额外在内存中处理,直接调整查询语句即可实现按安装日期排序取最新更新,以下是两种可行实现方案:

方案1:WQL语句直接排序(性能最优)

直接在查询语句末尾添加ORDER BY InstalledOn DESC,WMI会直接返回按安装日期降序排列的结果,取第一条就是最近安装的更新:

try
{
    // 直接在WQL中添加降序排序逻辑
    var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering ORDER BY InstalledOn DESC");
    using (ManagementObjectCollection managementObjectCollection = searcher.Get())
    {
        // 替换First为FirstOrDefault,避免无更新时抛异常
        var managementObject = managementObjectCollection.OfType<ManagementObject>().FirstOrDefault();
        if (managementObject == null)
        {
            systemLastWindowsUpdate = "无已安装更新";
            return;
        }
        string stringDate = managementObject["InstalledOn"].ToString();
        // 可添加多格式匹配,兼容不同系统的日期格式
        string[] formats = { "M/d/yyyy", "yyyy-MM-dd", "MM/dd/yyyy" };
        CultureInfo provider = CultureInfo.InvariantCulture;
        var result = DateTimeOffset.ParseExact(stringDate, formats, provider, DateTimeStyles.AssumeUniversal);
        systemLastWindowsUpdate = result.ToString("yyyy-MM-dd");
    }
}
catch (Exception)
{
    MessageBox.Show("获取Windows更新记录失败");
}

方案2:内存中LINQ排序

如果你不方便修改WQL语句,也可以把所有查询结果加载到内存后,用LINQ手动排序后取值:

try
{
    var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_QuickFixEngineering");
    using (ManagementObjectCollection managementObjectCollection = searcher.Get())
    {
        var updateList = managementObjectCollection.OfType<ManagementObject>().ToList();
        if (!updateList.Any())
        {
            systemLastWindowsUpdate = "无已安装更新";
            return;
        }
        // 内存中按InstalledOn日期降序排序,取第一条
        var latestUpdate = updateList.OrderByDescending(mo => 
        {
            var dateStr = mo["InstalledOn"].ToString();
            return DateTimeOffset.ParseExact(dateStr, new[] { "M/d/yyyy", "yyyy-MM-dd" }, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
        }).First();
        
        string stringDate = latestUpdate["InstalledOn"].ToString();
        var result = DateTimeOffset.ParseExact(stringDate, new[] { "M/d/yyyy", "yyyy-MM-dd" }, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
        systemLastWindowsUpdate = result.ToString("yyyy-MM-dd");
    }
}
catch (Exception)
{
    MessageBox.Show("获取Windows更新记录失败");
}

注意事项

  • 部分旧版本系统中补丁的InstalledOn字段格式可能存在差异,增加多格式匹配可降低解析失败概率
  • 若设备从未安装过系统更新,Win32_QuickFixEngineering会返回空结果,用FirstOrDefault提前判空可避免不必要的异常

内容的提问来源于stack exchange,提问作者TheQuestionmark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:30:01