You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取UWP应用更新的可选/强制状态与版本?附测试方法

UWP应用更新:获取强制/可选状态及版本信息的可行方案

问题回顾

使用StoreContext.GetAppAndOptionalStorePackageUpdatesAsync()仅能检测是否存在更新,无法获取更新包的强制/可选状态和目标版本信息,导致无法实现“允许用户跳过可选更新”的UI逻辑。同时测试飞行包未勾选“设为强制更新”时,自定义的IsMandatoryUpdate()方法仍返回true,无法准确区分更新类型,也无法测试可选更新场景。已尝试Package.Current、Package.Dependencies及该方法返回的包信息,输出内容无差异。

解决方案

1. 从StorePackageUpdate提取版本与强制状态信息

StorePackageUpdate对象的Package属性包含完整的目标包信息,可直接获取版本号,同时Mandatory字段的准确性需要结合Store后台配置与版本号校验:

private async Task CheckForUpdates()
{
    var storeContext = StoreContext.GetDefault();
    var updates = await storeContext.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        foreach (var update in updates)
        {
            // 获取目标版本号
            var targetVersion = update.Package.Id.Version;
            string targetVersionStr = $"{targetVersion.Major}.{targetVersion.Minor}.{targetVersion.Build}.{targetVersion.Revision}";
            
            // 获取强制更新状态
            bool isMandatory = update.Mandatory;
            
            // 结合当前版本校验,避免元数据同步延迟导致的误判
            var currentVersion = Package.Current.Id.Version;
            bool isVersionHigher = targetVersion.Major > currentVersion.Major 
                                || (targetVersion.Major == currentVersion.Major && targetVersion.Minor > currentVersion.Minor)
                                || (targetVersion.Major == currentVersion.Major && targetVersion.Minor == currentVersion.Minor && targetVersion.Build > currentVersion.Build)
                                || (targetVersion.Major == currentVersion.Major && targetVersion.Minor == currentVersion.Minor && targetVersion.Build == currentVersion.Build && targetVersion.Revision > currentVersion.Revision);
            
            if (isVersionHigher)
            {
                // 处理更新逻辑:强制更新则弹窗提示必须更新,可选更新则提供跳过选项
            }
        }
    }
}

如果返回的Package与当前应用包信息一致,说明Store后台元数据未同步,可等待1-2小时后重试,或检查Store后台的更新发布状态。

2. 修复强制更新判断异常

测试飞行包的Mandatory字段返回异常,需排查以下几点:

  • 确认Store后台飞行包设置中未勾选“设为强制更新”,且该飞行包版本号高于测试设备当前安装的版本
  • 重置测试设备的Microsoft Store缓存:设置 → 应用 → Microsoft Store → 高级选项 → 重置
  • 确保测试设备的登录账号已加入对应的飞行测试组,且切换到正确的测试通道(如“预览”通道)

3. 替代方案:Store REST API

若UWP内置API仍无法满足需求,可通过Store官方REST API获取更详细的更新元数据:

  • 使用应用的Store ID和用户身份令牌调用更新查询接口,可获取包括强制状态、版本号、更新说明在内的完整信息
  • 注意:需处理用户身份验证流程,仅适用于已发布到Microsoft Store的应用

可选更新测试方法

  1. 在Store后台创建飞行测试包,不勾选“设为强制更新”,且版本号高于测试设备当前安装的应用版本
  2. 将测试设备的登录账号加入该飞行测试组,并切换到对应的测试通道
  3. 重置Store缓存后,手动触发应用内的更新检查,此时update.Mandatory应返回false,即可测试可选更新的UI逻辑(如提供“稍后更新”按钮)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:50:25