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

TrySilentDownloadAndInstallStorePackageUpdatesAsync未重启应用的解决与测试疑问

问题描述

我正在测试一款通过Microsoft Store发布、以MSIX打包的Win32桌面应用。尝试使用TrySilentDownloadAndInstallStorePackageUpdatesAsync进行应用更新,该功能可完成更新,但安装后应用立即退出且未重启。
微软文档显示该函数应重启应用(从IsNowAGoodTimeToRestartApp函数名称可推断),但实际观察并非如此:调用后的调试语句均未触发,说明应用确实被终止但未重启。
考虑替代方案时发现旧Win32 API RegisterApplicationRestart,但它存在限制:“为防止循环重启,系统仅在应用运行至少60秒后才会重启”。这不符合我们快速检查更新、安装后重启的需求,等待60秒会破坏快速检查的目的。

请问有哪些替代方案?是否有办法让应用在安装Microsoft Store更新后自动重启?
(附带疑问:是否无需经过认证流程即可测试Microsoft Store更新?认证耗时数小时,严重影响开发测试周期。)

解决方案

一、应用更新后自动重启的替代方案

1. 自定义外部启动器程序

创建一个轻量的辅助启动器作为主应用的“看守进程”:

  • 主应用启动时同步启动该启动器;
  • 启动器通过进程ID或名称监听主应用状态;
  • 检测到主应用因更新终止后,等待2-3秒(确保更新安装完成),再重新启动主应用。
  • 实现示例(C# 伪代码):
    var mainProcess = Process.GetCurrentProcess();
    var mainAppPath = mainProcess.MainModule.FileName;
    mainProcess.WaitForExit();
    Task.Delay(2000).Wait();
    Process.Start(mainAppPath);
    
  • 注意:启动器需打包进MSIX包,可通过Package.Current.InstalledLocation获取主应用路径,避免硬编码。

2. 利用任务计划触发重启

在触发更新前,创建一次性系统任务指定主应用终止后启动:

  • 使用TaskScheduler API或schtasks.exe命令行工具创建任务;
  • 设置任务为即时执行(延迟几秒),或触发条件为“特定进程终止”;
  • 更新完成后任务自动启动主应用,不受RegisterApplicationRestart的60秒限制。
  • 命令行示例:
    schtasks /create /tn "RestartMyApp" /tr "C:\Path\To\MyApp.exe" /sc once /st %TIME% /sd %DATE% /f
    

3. 优化RegisterApplicationRestart使用逻辑

微调应用流程即可绕过60秒限制:

  • 应用启动后立即调用RegisterApplicationRestart注册重启;
  • 将更新检查逻辑延迟60秒执行(比如启动后后台异步等待,再触发检查);
  • 更新触发时应用已运行满60秒,满足重启条件。

二、无需完整认证测试Store更新的方法

1. 使用Microsoft Store测试通道(Flight环)

  • 在开发者后台创建应用测试版本(Flight),上传更新包后选择“快速测试”模式,审核时间通常10-30分钟;
  • 邀请内部测试人员或添加自己的测试设备,安装测试版本后即可测试更新流程,无需等待正式版完整认证。

2. 本地旁加载测试

  • 使用MSIX打包工具生成更新包,在测试设备开启“旁加载应用”权限(设置-更新和安全-开发者选项);
  • 直接安装本地MSIX包模拟更新,无需上传到Store,适合快速迭代测试更新逻辑;
  • 注意:旁加载应用与正式Store应用的包名/发布者ID需不同,避免冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:32:52