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

如何制作仅更新exe与chm、不覆盖许可的通用Wix小升级安装包

Wix 多用户专属许可安装包通用升级方案

以下是两种适配场景的可行方案,按实施复杂度从低到高排序:

方案1:轻量级独立升级MSI(最快落地,完全适配当前场景)

无需改动原有MSI生成逻辑,也不需要研究MSP补丁规则,所有用户共用同一个升级包:

  • 核心逻辑:做一个仅包含新版exe、chm文件的小型MSI,安装时自动读取原程序的安装路径,仅覆盖两个通用文件,完全不涉及许可文件的操作
  • 关键实现步骤:
    • 读取原程序写入的注册表Uninstall节点的InstallLocation值,获取实际安装路径(所有用户的MSI除许可文件外,产品注册表信息、安装路径规则都是统一的,可直接通用读取逻辑)
    • 增加安装前置校验:仅当检测到原安装路径存在时允许运行升级包,避免误装
  • Wix 实现参考代码:
<!-- 读取原程序的安装路径 -->
<Property Id="ORIGIN_INSTALL_PATH">
  <RegistrySearch 
    Id="SearchOriginInstallPath" 
    Root="HKLM" 
    Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{你的原产品固定UpgradeCode}" 
    Name="InstallLocation" 
    Type="directory" />
</Property>

<!-- 安装前置校验 -->
<Condition Message="未检测到原程序安装,请先安装正式版本后再运行升级包">
  ORIGIN_INSTALL_PATH AND NOT REMOVE="ALL"
</Condition>

<!-- 定义要更新的文件,直接写入原安装路径 -->
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ORIGIN_INSTALL_PATH">
    <Component Id="Update_Exe" Guid="*">
      <File Id="New_App_Exe" Source="本地新版exe路径\你的程序名.exe" KeyPath="yes" />
    </Component>
    <Component Id="Update_Chm" Guid="*">
      <File Id="New_Help_Chm" Source="本地新版chm路径\你的帮助文档名.chm" KeyPath="yes" />
    </Component>
  </Directory>
</Directory>

<!-- 安装功能定义 -->
<Feature Id="Update_Feature" Title="程序通用升级包" Level="1">
  <ComponentRef Id="Update_Exe" />
  <ComponentRef Id="Update_Chm" />
</Feature>
  • 验证提示:打包完成后可先在测试环境验证,确认许可文件不会被修改、两个通用文件成功替换后再批量分发。

方案2:拆分安装包结构(适合长期迭代)

如果后续还有多次版本更新,可一次调整原有MSI生成逻辑,彻底解决升级繁琐问题:

  • 将原安装包拆为两个独立MSI:
    1. 基础运行包:所有用户完全统一,仅包含exe、chm通用文件,固定UpgradeCode和版本号
    2. 许可授权包:每个用户专属,仅包含许可文件,安装时校验基础包已安装才可运行
  • 后续版本更新只需要发布基础运行包的升级版本,所有用户都可以直接用同一个升级包安装,完全不会触碰许可文件。

避坑说明

无需浪费时间研究MSP补丁制作规则,MSP要求必须匹配原MSI的包码、文件结构,当前场景下每个用户原MSI都不同,MSP补丁完全无法通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:36:08