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

WPF应用程序如何检测卸载事件?

WPF打包应用实现卸载时执行自定义任务的解决方案

你遇到的核心问题:PackageCatalog.PackageUninstalling事件无法监听当前应用自身的卸载操作——因为系统开始卸载你的应用时,会先终止你的主应用进程,这个事件根本没机会在你的WPF应用中触发。该事件的设计目的是让应用监听系统中其他包的卸载行为,而非自身。

针对桌面桥打包的WPF应用,以下是实现卸载时执行任务的正确方法:

方法一:配置卸载任务扩展(推荐)

通过Windows Application Packaging Project的清单文件,注册一个卸载任务,让系统在卸载应用时自动运行指定的程序或脚本。

操作步骤:

  • 准备卸载任务程序:创建一个独立的可执行程序(比如控制台应用),编写你需要在卸载时完成的逻辑(例如清理缓存文件、删除自定义注册表项等)。
  • 将卸载程序添加到打包项目:右键点击Windows Application Packaging Project → 「添加」→「现有项」,选中你的卸载任务程序;在属性窗口中设置「复制到输出目录」为「始终复制」。
  • 编辑Package.appxmanifest:
    1. 在根节点Package中添加desktop命名空间:
      <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
               xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
               ...>
      
    2. 在Applications节点之后添加Extensions节点,配置卸载任务:
      <Extensions>
        <desktop:Extension Category="windows.uninstallTask" 
                           Executable="YourUninstallTask.exe" 
                           EntryPoint="Windows.FullTrustApplication" />
      </Extensions>
      
      替换YourUninstallTask.exe为你的卸载任务程序的实际文件名。

额外说明

  • 最初的System.InvalidOperationException错误确实是因为未打包的WPF应用没有包身份标识,打包后该错误消失,但事件无法触发的原因是事件的设计用途限制,并非代码问题。
  • 卸载任务程序由系统在卸载流程中启动执行,此时你的主WPF应用已经被终止,因此卸载任务需要独立完成所有操作,不能依赖主应用的运行状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:34:58