WIX卸载ExePackage时如何同步移除WebView2 Runtime
你当前配置无法卸载WebView2的核心原因有三个:
- 没有为
ExePackage配置UninstallCommand卸载命令,Burn引擎没有执行WebView2卸载的对应指令 - 没有配置
DetectCondition告知Burn引擎WebView2的安装状态,引擎无法判断是否需要对该包执行卸载操作 - 原配置中使用的
REMOVE是MSI包的内置属性,在Burn引导层不生效,原安装条件判断逻辑无效
重要提醒:微软官方不建议随应用卸载全局安装的常青版(Evergreen)WebView2 Runtime,它属于系统共享组件,可能被其他软件依赖,误卸载会导致其他依赖WebView2的程序崩溃。仅当你部署的是应用私有的固定版本(Fixed Version)WebView2,或明确确认系统中WebView2由你的安装包首次安装时,才适合配置同步卸载。
第一步:引入WixUtil扩展
首先修改Wix根节点,引入Util扩展命名空间,用于后续通过注册表检测WebView2安装状态:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
第二步:添加WebView2安装状态检测
在Bundle节点下、Chain节点前,添加注册表搜索逻辑,判断系统中是否已安装WebView2 Runtime,给WVRTInstalled变量赋值:
<!-- 检测64位路径安装的WebView2 --> <util:RegistrySearch Id="SearchWVRT64" Root="HKLM" Key="SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Value="pv" Result="exists" Win64="yes" Variable="WVRT64Installed"/> <!-- 检测32位路径安装的WebView2 --> <util:RegistrySearch Id="SearchWVRT32" Root="HKLM" Key="SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}" Value="pv" Result="exists" Variable="WVRT32Installed"/> <!-- 合并检测结果 --> <SetVariable Id="WVRTInstalled" Value="1" After="AppSearch" Condition="WVRT64Installed OR WVRT32Installed"/>
注:{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}是微软官方固定的WebView2 Runtime产品GUID,可用于准确检测常青版WebView2的安装状态。
第三步:修改ExePackage配置补全卸载逻辑
替换原有ExePackage节点配置,补全卸载命令、检测条件,修正安装判断逻辑:
<ExePackage Id="InvokeBootstrapper" Name="Install WebView2 Runtime" Cache="no" Compressed="no" PerMachine="yes" Vital="yes" SourceFile="MicrosoftEdgeWebview2Setup.exe" InstallCommand="/silent /install" UninstallCommand="/silent /uninstall" DetectCondition="WVRTInstalled" InstallCondition="NOT WVRTInstalled"/>
第四步:调整Chain包顺序(可选但强烈建议)
Burn引擎执行Chain中包的逻辑为:安装时从上到下执行,卸载/修复时从下到上执行。请将WebView2的ExePackage放在Chain的最顶部,你自己的主程序MsiPackage放在后面,保证安装时先装依赖再装主程序,卸载时先卸主程序最后卸依赖,避免主程序运行时找不到依赖。
进阶优化(避免误删共享组件)
为了避免卸载用户系统中原本就存在的WebView2,建议增加私有标记判断:
- 当你的安装包执行WebView2安装成功后,在自身应用的注册表路径下写入标记值(例如
WebView2InstalledByMyApp=1) - 为
ExePackage增加UninstallCondition,仅当上述标记存在时才执行WebView2卸载 - 卸载完成后删除该标记值
内容的提问来源于stack exchange,提问作者Travis Pettry
相关产品推荐
相关产品推荐

