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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:18:41