MSIX打包的WPF应用启动更新报错0x80073D02问题咨询
错误触发原因
你遇到的0x80073D02是MSIX部署场景下的典型文件锁冲突错误,触发逻辑如下:
- 你当前配置的
OnLaunch启动时更新逻辑,执行时机是旧版本应用进程已经启动之后:用户双击启动图标时,系统会先拉起旧版本的WPF应用进程,之后才会在后台触发.appinstaller定义的更新检查逻辑 - MSIX的版本更新需要替换旧版本包的核心执行文件、资源文件,而这些文件此时已经被刚启动的旧版本进程持有独占锁,系统部署服务无法写入修改,就会抛出需要关闭旧应用的报错
- 手动关闭应用再重启能更新成功的原因是,上一次启动时已经把新版本安装包下载到本地缓存,关闭旧进程后所有文件锁被释放,第二次启动时更新操作可以直接完成文件替换
修复方案
方案1(推荐,适配静默更新需求)
调整.appinstaller的更新配置,添加UpdateBlocksActivation属性,让更新检查和安装操作在应用进程启动前完成,修改后的配置如下:
<UpdateSettings> <OnLaunch HoursBetweenUpdateChecks="0" UpdateBlocksActivation="true" /> <ForceUpdateFromAnyVersion>true</ForceUpdateFromAnyVersion> </UpdateSettings>
该配置会在用户启动应用时先阻塞进程启动,优先完成更新,全程无用户提示,仅会让应用启动延迟略有增加
方案2
如果不希望阻塞应用启动,可在WPF应用代码中接入MSIX更新API,在应用启动逻辑的最前端主动检查更新,检测到新版本时主动退出当前进程,调用部署接口完成更新后再自动拉起新版本应用。
内容的提问来源于stack exchange,提问作者Rye bread
相关产品推荐
相关产品推荐

