ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WiX Toolset v3.14 版本演进全解读:ARM64 支持、安全修复与 .NET 运行时适配

WiX Toolset v3.14 版本演进全解读:ARM64 支持、安全修复与 .NET 运行时适配 开发工具构建工具【免费下载链接】wix3WiX Toolset v3.x项目地址https://gitcode.com/gh_mirrors/wi/wix3点击查看免费下载本文以仓库根目录 History.md 中记录的 WiX v3.14 发布历史为主线逐条梳理该版本生命周期内的核心变更——从放弃 Windows XP 支持、引入 ARM64 目标平台到修复 DTF 的 Zip Slip 漏洞、增强 Burn 引擎稳定性再到为 .NET Framework 4.7/4.7.1/4.7.2/4.8 提供开箱即用的 NetFxExtension 预置包。读完本文你将掌握 v3.14 相比此前版本的关键能力边界、各里程碑版本的修复清单以及这些变更在 src、src/DTF、src/ext 等目录中的源码级落点。一、v3.14 版本脉络总览WiX Toolset v3.x 是 WiX 历史上维护时间最长的分支之一而 v3.14 是其为 v4 过渡做准备的收官版本。从 History.md 可以看到v3.14 经历了从基础版本3.14.0到最终3.14.0.6526的十余次增量构建每次构建都以WixBuild: Version为标题分段记录提交构建版本主要变更摘要3.14.0v3.14 分支起点3.14.0.712校验 VS2017 产品 ID 与受支持 SKU 的匹配关系3.14.0.1118修复 bundle 提权启动时 clean room 的 DLL 劫持问题3.14.0.1703修复 VSTS 日志记录器死锁、依赖项自定义键被跳过、SqlExtension 支持 TLS 1.23.14.0.2812接入 .NET Foundation 签名服务、移除最后的 .NET 2.0 程序集引用3.14.0.3316修复 DTF 的 Zip Slip 漏洞、Burn 下载支持 HTTP 到 HTTPS 重定向3.14.0.3827核心工具集实现 ARM64 支持、MakeSfxCA 支持超长路径、SfxCA stub 不再签名、防病毒误杀导致提权启动失败时自动重试3.14.0.3909ARM 平台强制InstallerVersion至少为 500、附带 ARM64 感知的 .cub 文件、ARM64 自定义操作 64 位化3.14.0.3910为更多枚举补充 ARM64 取值代码与文档同步3.14.0.4118修复 WixStdBA 在DisplayInternalUI场景下的挂起、iis:Certificate 显式申请读写权限3.14.0.5721放弃 XP 支持、修复 WixStdBA 空引用崩溃、修正SuppressSignatureVerification文档、修复ReadUInt32溢出、新增 .NET 4.7/4.7.1/4.7.2/4.8 支持3.14.0.5722 / 3.14.0.6526无条目记录的收尾构建整体节奏呈现出清晰的三条主线平台现代化放弃 XP、引入 ARM64、安全加固Zip Slip、DLL 劫持、TLS 1.2、签名校验、生态适配.NET 4.8、.NET Foundation 签名、VS2017 SKU 校验。二、平台支持演进告别 XP拥抱 ARM642.1 放弃 Windows XP为 v4 过渡清理包袱3.14.0.5721中的第一项变更是WIXFEAT:6469 - Drop XP support for v3.14 v4 transition。这意味着 v3.14 是 WiX v3 分支中最后一个仍保留 XP 时代代码路径的过渡版本后续向 v4 演进时不再维护 XP 兼容。对于仍在构建面向 XP 安装包的团队这标志着一个明确的兼容性分水岭基于 v3.14 之前的版本继续交付或迁移到更新的目标系统。2.2 ARM64 支持从工具集到自定义操作的全链路改造ARM64 是 v3.14 最重量级的功能投入分多个构建逐步落地核心工具集3.14.0.3827WIXFEATURE:5558编译器、链接器等核心工具开始产出 ARM64 感知的中间产物。仓库中新增的 src/wixarm.proj 与 src/libs/libs_multitarget.proj 正是为多目标平台构建而设计的项目入口。枚举与类型扩展3.14.0.3910WIXBUG:6141为 MSI 相关的多个枚举补充 ARM64 取值且文档同步更新保证 Schema 与编译器解析一致。安装器版本与校验库3.14.0.3909WIXBUG:6137强制Package/InstallerVersion在 ARM 目标上至少为500并附带 ARM64 感知的 .cub合并模块校验数据库文件。这一约束在 src/tools/wix/Xsd/wix.xsd 的InstallerVersion属性定义及第 3171、3179 行的说明中可以得到印证——部分特性明确要求InstallerVersion不小于 500 才可用。自定义操作 64 位化3.14.0.3909WIXBUG:6136修复 ARM64 包中未加后缀的引用意外拉入 32 位 CA 的问题使 ARM64 下的自定义操作真正以 64 位方式加载执行。从实现位置看ARM64 支持不仅涉及 src/tools/wix 下的编译器与链接器还辐射到 src/burn 的引擎层和 src/ext/ca 的自定义操作侧属于一次横跨全工具链的适配。三、.NET Framework 运行时适配4.7/4.7.1/4.7.2/4.8 一键检测3.14.0.5721连续记录了三条与 .NET 相关的特性WIXFEAT:5575 - Add .NET 4.7 and 4.7.1 MSI properties to NetFxExtension、.NET 4.7.2、.NET 4.8。NetFxExtension 的实现方式是声明式的 .wxs 片段 运行时注册表检测在仓库中表现为 src/ext/NetFxExtension/wixlib 下从NetFx47.wxs、NetFx471.wxs、NetFx472.wxs到NetFx48.wxs的完整文件序列。以 NetFx48.wxs 为例其核心机制包含两部分1) MSI 属性检测通过WIXNETFX4RELEASEINSTALLED属性来自 util:RegistrySearchRef读取注册表中的 Release 版本号与最低发布版本常量比较后设置WIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED?define NetFx48MinRelease 528040 ? PropertyRef IdWIXNETFX4RELEASEINSTALLED / Property IdWIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED Secureyes / SetProperty IdWIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED Value1 AfterAppSearch WIXNETFX4RELEASEINSTALLED #$(var.NetFx48MinRelease) /SetProperty2) Burn 预置包为引导程序提供NetFx48Web在线安装器与NetFx48Redist离线可再发行包两个PackageGroup通过RemotePayload声明远程下载文件的哈希、证书指纹与版本信息并指定静默安装参数PackageGroup IdNetFx48Web ExePackage InstallCommand/q /norestart /ChainingPackage quot;[WixBundleName]quot; /log quot;[NetFx48WebLog].htmlquot; RepairCommand/q /norestart /repair /ChainingPackage quot;[WixBundleName]quot; /log quot;[NetFx48WebLog].htmlquot; UninstallCommand/uninstall /q /norestart /ChainingPackage quot;[WixBundleName]quot; /log quot;[NetFx48WebLog].htmlquot; PerMachineyes DetectCondition!(wix.NetFx48WebDetectCondition) Vitalyes Permanentyes Protocolnetfx4 DownloadUrl$(var.NetFx48WebLink) LogPathVariableNetFx48WebLog Compressedno Name!(wix.NetFx48WebPackageDirectory)ndp48-web.exe RemotePayload CertificateThumbprintABDCA79AF9DD48A0EA702AD45260B3C03093FB4B DescriptionMicrosoft .NET Framework 4.8 Setup Hash4181398AA1FD5190155AC3A388434E5F7EA0B667 ProductNameMicrosoft .NET Framework 4.8 Size1439328 Version4.8.4115.0 / /ExePackage /PackageGroup这些片段中的WixMbaPrereqPackageId、WixMbaPrereqLicenseUrl等变量还承担了与 WixStdBA 托管引导程序联动的职责让 bundle 能够在安装开始时自动检测并补齐 .NET 运行时。同类文件NetFx47.wxs、NetFx471.wxs、NetFx472.wxs的结构完全一致只是MinRelease常量、下载链接与负载元数据不同——这是 WiX 官方模板化预置包的典型写法开发者也可以参考它为自己的运行时依赖编写类似的PackageGroup。四、Burn 引擎与 WixStdBA 稳定性专项修复v3.14 的多个构建都聚焦于 Burn 引导引擎src/burn/engine与标准托管 UIWixStdBA见 src/ext/BalExtension/wixstdba的稳定性问题WixStdBA 空引用崩溃3.14.0.5721修复了某个特定 UI 交互路径下的空引用异常属于典型的 UI 线程状态竞态问题。DisplayInternalUI挂起3.14.0.4118WIXBUG:4342/WIXBUG:6158DisplayInternalUI允许在托管 UI 中内嵌显示 MSI 原生命名管道 UI。此前在按下 BA 取消按钮时以及某些特定组合场景下会出现挂起本次两处修复分别针对取消按钮路径与一般场景路径。提权启动失败自动重试3.14.0.3827WIXFEAT:5658当 bundle 提权启动疑似被杀毒软件干扰而失败时自动重试一次显著提升最终用户环境的安装成功率。Clean room DLL 劫持3.14.0.1118WIXBUG:5724bundle 提权启动后使用的 clean room隔离目录存在 DLL 搜索路径劫持风险本次修复收紧了动态库加载路径。下载重定向3.14.0.3316WIXBUG:6071Burn 下载器src/burn/engine/download.cpp 所在的引擎下载链路支持 HTTP 到 HTTPS 的 301/302 重定向避免下载被降级为明文传输。这些修复共同指向一个目标让最终用户在真实环境含杀软、代理、非管理员提权中也能稳定地完成安装。对于基于 Burn 自研引导程序的团队这些条目也提示了同类的鲁棒性设计点——取消路径、重试策略、DLL 搜索顺序、重定向处理。五、安全加固Zip Slip、溢出、TLS 1.2 与签名校验5.1 DTF 的 Zip Slip 漏洞修复WIXBUG:60753.14.0.3316修复了 DTFDeployment Tools Foundationsrc/DTF中的 Zip Slip 漏洞。Zip Slip 是指解压时未对归档内文件名做路径规范化恶意 zip 条目可以通过../跳出目标目录实现任意文件写入。DTF 的压缩库实现位于 src/DTF/Libraries/Compression.ZipZipEngine.cs、ZipFormat.cs等其中ZipEngine负责归档条目的读取与解压相关条目解析代码会逐个校验本地文件头与目录结构。v3.14 起凡是依赖 DTF 处理不可信 zip 的工具如各类自定义操作与解包器都应升级到该版本及以上。5.2 ReadUInt32 溢出修复WIXBUG:62993.14.0.5721修复了二进制流读取时的OverflowException。DTF 的压缩与归档解析大量依赖BinaryReader.ReadUInt32()读取魔数、偏移量等字段例如 ZipEngine.cs 中的IsArchive校验、ZipFormat.cs 中的条目头部与中央目录解析。当输入文件被截断或包含恶意尺寸字段时偏移计算可能溢出导致异常修复后该类输入会被安全地识别为无效归档而非直接崩溃。5.3 SqlExtension 支持 TLS 1.2WIXBUG:55433.14.0.1703为 src/ext/SqlExtension 增加 TLS 1.2 支持。该扩展负责在安装时连接 SQL Server 执行脚本sql:SqlDatabase、sql:SqlScript等元素参见 src/ext/SqlExtension/wixext 的扩展实现与 src/ext/SqlExtension/wixlib 的 wixlib 片段。在现代 SQL Server 默认禁用旧版 TLS 的环境下不支持 TLS 1.2 的客户端会直接连接失败此修复使安装脚本在加密连接场景下不再受阻。5.4 签名校验与文档修正WIXBUG:61433.14.0.5721修正了Payload/SuppressSignatureVerification的文档描述。该属性在 src/tools/wix/Xsd/wix.xsdPayload 元素与第 1320 行另一处元素定义中均有声明并被 src/tools/wix/Compiler.cs 第 20767、21618 行处理。它控制 Burn 是否跳过对负载文件 Authenticode 签名的验证——默认验证签名yes时跳过。文档修正澄清了该属性的准确语义边界避免开发者误用导致签名绕过风险。与之配套的是3.14.0.3827的另一项变更不再对 SfxCA stub 签名WIXBUG:6089因为 stub 只是承载托管自定义操作程序集的壳对其签名反而会阻碍后续对真实 CA DLL 的签名流程。六、自定义操作工具链与构建基础设施改进6.1 MakeSfxCA 支持超长路径WIXBUG:46883.14.0.3827让 src/DTF/Tools/MakeSfxCA 在命令行参数过长深目录、长文件名的 Windows 构建机上常见时自动改用响应文件传递参数突破命令行长度限制避免构建在极深路径下失败。6.2 签名基础设施现代化.NET Foundation 签名服务3.14.0.2812官方构建接入 .NET Foundation 的代码签名服务这解释了为何 v3.14 及之后产物的 Authenticode 签名主体与更早版本不同。移除 .NET 2.0 程序集引用3.14.0.2812WIXBUG:5711清理了工具集中最后残存的 .NET Framework 2.0 程序集依赖进一步降低运行时兼容负担。6.3 VS2017 产品 ID 与 SKU 校验WIXBUG:55973.14.0.712让 VSExtensionsrc/ext/VSExtension在检测 Visual Studio 2017 时将产品 ID 与受支持的 SKU 列表Community/Professional/Enterprise 等比对避免将非目标 SKU 的安装状态误判为已安装。6.4 依赖项自定义键修复WIXBUG:58033.14.0.1703修复了 DependencyExtensionsrc/ext/DependencyExtension的依赖计算缺陷——此前自定义注册键dep:Provides中的自定义键名会被跳过导致依赖关系统计不完整。该扩展的核心逻辑在 src/ext/DependencyExtension/wixext 的 wixext 实现与 src/ext/DependencyExtension/ca 的自定义操作中。6.5 VSTS 日志记录器死锁WIXBUG:54863.14.0.1703修复了在 VSTSAzure DevOps 前身构建环境中使用其日志记录器时可能出现的死锁保证 WiX 工具链在 CI 管道中长时间运行时日志输出不被阻塞。七、结合源码理解 v3.14 的验证方式对于希望进一步在本地验证这些变更的读者仓库提供了多层入口Schema 层src/tools/wix/Xsd/wix.xsd 是candle/light的输入契约InstallerVersion第 3100 行与SuppressSignatureVerification第 993、1320 行等属性的取值约束可以直接查阅。编译器层src/tools/wix/Compiler.cs 中的属性处理分支如第 20767、21618 行展示了属性从 XML 到内部符号表的解析路径。压缩库层src/DTF/Libraries/Compression.Zip/ZipEngine.cs 与 ZipFormat.cs 是 Zip Slip 与溢出修复的直接载体其下还有对应的 src/DTF/Tests/Compression.Zip 测试项目。扩展层src/ext/NetFxExtension/wixlib 的每个NetFx*.wxs对应一个 .NET 运行时版本的检测与预置包声明src/ext/SqlExtension、src/ext/DependencyExtension、src/ext/VSExtension 则对应 TLS、依赖项与 VS 检测相关修复。构建入口src/wixarm.proj、src/libs/libs_multitarget.proj 反映了 ARM64 多目标构建的组织方式。八、给 v3.14 使用者的升级清单综合 History.md 的完整记录迁移或升级到 WiX v3.14建议直接使用最终构建3.14.0.6526时应重点核对目标平台如果仍需要生成 Windows XP 可安装的包v3.14 已不是合适选择如需 ARM64 安装包/引导程序则必须使用 v3.14 及以上。.NET 运行时检测将自定义的 .NET 4.7/4.7.1/4.7.2/4.8 注册表检测逻辑替换为 NetFxExtension 的预置属性与PackageGroup可复用其WIX_IS_NETFRAMEWORK_48_OR_LATER_INSTALLED等标准属性。安全基线确认引用的 DTF 压缩库已包含 Zip Slip 与ReadUInt32溢出修复为SqlExtension的 SQL 连接启用 TLS 1.2 场景做回归。Burn 场景涉及DisplayInternalUI的定制 UI 应回归取消路径依赖远程负载下载的 bundle 应确认下载器能跟随 HTTPS 重定向使用自研 CA 的包需理解SfxCA stub 不再签名对最终签名策略的影响。签名策略若构建流水线对产物签名主体有硬编码校验例如只接受旧的签名机构需适配 .NET Foundation 签名服务签发的证书链。赞分享开发工具构建工具【免费下载链接】wix3WiX Toolset v3.x项目地址https://gitcode.com/gh_mirrors/wi/wix3点击查看免费下载相关推荐Hertz v0.10.0 版本解读SSE 协议支持、http.Handler 适配器与稳定性修复全解析Hertz v0.10.0 版本解读SSE 协议支持、http.Handler 适配器与稳定性修复全解析 Hertz v0.10.0 是一次围绕流式传输与生后端微服务Web框架SciPy 1.7.3 缺陷修复版本全解析macOS arm64 二进制轮子支持与 stats.qmc 越界索引修复SciPy 1.7.3 缺陷修复版本全解析macOS arm64 二进制轮子支持与 stats.qmc 越界索引修复 导读 本文基于仓库中的官方发布说明 do科学计算数据科学高性能计算Pillow 7.1.0 版本解析安全修复、API 变更与 APNG 支持全面解读Pillow 7.1.0 版本解析安全修复、API 变更与 APNG 支持全面解读 Pillow 7.1.0 是一个兼具安全加固与功能扩展的版本它修复了 F图像处理计算机视觉上一篇Logseq插件开发完全指南从零构建知识管理扩展下一篇Electron 中 UploadData 对象详解请求上传体的结构定义、API 使用与源码实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表