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

C# UWP应用在Windows10上崩溃后如何实现自动重启

Windows 10环境下UWP应用崩溃自动重启实现方案

Windows 10 1709(内部版本16299)及以上版本原生提供UWP应用重启相关能力,不需要额外开发驻留程序即可覆盖绝大多数崩溃场景,低版本系统可通过辅助进程方案兜底,具体可行方案如下:

方案1:官方原生API实现(推荐,无额外依赖)

该方案是微软官方提供的标准实现,适配所有上架微软商店的UWP应用,对系统侵入性最低。

  • 第一步:修改应用清单配置
    打开项目中的Package.appxmanifest文件,添加重启任务扩展声明,示例代码如下:
<Package
  ...
  xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
  IgnorableNamespaces="uap mp desktop">
  <Applications>
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="YourNamespace.App">
      <Extensions>
        <desktop:Extension Category="windows.appStartup" Executable="$targetnametoken$.exe" EntryPoint="YourNamespace.App">
          <desktop:StartupTask TaskId="AppRestartTask" Enabled="true" DisplayName="App Auto Restart" />
        </desktop:Extension>
      </Extensions>
    </Application>
  </Applications>
</Package>
  • 第二步:注册全局异常捕获与重启逻辑
    在App.xaml.cs中订阅全局未捕获异常事件,在异常触发时调用系统重启API:
using Windows.ApplicationModel.Core;

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    // 原有应用初始化逻辑
    this.UnhandledException += OnAppUnhandledException;
}

private async void OnAppUnhandledException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e)
{
    // 标记异常已处理,阻止应用直接闪退
    e.Handled = true;
    // 可在此处写入崩溃日志到本地存储,用于后续问题排查
    // 调用重启API,可传入自定义启动参数,标记本次启动为崩溃重启,方便后续做状态恢复
    await CoreApplication.RequestRestartAsync("--from-crash-restart");
}

注意:该方案无法捕获应用初始化极早期(如App构造函数执行阶段、OnLaunched最开始阶段)发生的崩溃,这类场景需要搭配兜底方案使用。

方案2:轻量看门狗进程兜底

针对原生API覆盖不到的早期崩溃场景,可搭配打包在应用内的轻量Win32进程做看门狗:

  • 首先为UWP应用声明应用执行别名,允许同包内的Win32进程直接通过别名启动UWP主程序,不需要依赖协议激活
  • 开发一个无界面的Win32控制台小程序作为看门狗,逻辑非常简单:启动后首先拉起UWP主进程,之后循环检测主进程存活状态,一旦检测到主进程异常退出,等待2-3秒后自动重新拉起
  • 配置包 manifest 让看门狗进程随UWP主程序同时启动,UWP启动后可和看门狗做简单的心跳交互,避免看门狗自身异常退出
    该方案兼容所有Windows 10正式版本,稳定性高。

方案3:系统级策略配置(适合企业内部分发场景)

如果你的UWP应用不对外公开发布,仅在企业内部设备部署,可以直接通过系统命令配置崩溃自动重启规则,不需要修改应用代码:

  • 首先获取你应用的包族名,可以在项目的manifest配置页直接查看
  • 打开管理员权限的PowerShell,执行如下命令开启自动重启:
# 将命令中的<替换为你的应用包族名>替换为实际值
Set-AppxPackageAutoRestart -PackageFamilyName <替换为你的应用包族名> -Enabled $true -RestartDelay 2000

该配置生效后,系统会自动监听对应应用的运行状态,崩溃后会按照设定的延迟时间自动重启应用。

通用注意事项:

  1. 所有自动重启逻辑必须加上重启次数阈值,比如1分钟内连续崩溃超过3次就停止自动重启,避免陷入崩溃-重启的死循环占用系统资源
  2. 崩溃重启时建议携带专用启动参数,应用启动后识别到是崩溃重启场景时,可跳过可能导致上次崩溃的初始化逻辑,同时尝试恢复用户上次的操作状态
  3. 上架微软商店的应用需要遵守商店政策,禁止在用户主动关闭应用后依旧强制触发重启

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:51:26