Wix 3.10 bundle部署外部前置负载的相对路径配置问题
Wix 3.10 外部依赖相对路径配置解决方案
报错的核心原因是:[WixBundleOriginalSourceFolder]是运行时变量,直接写在ExePackage的Source属性中无法生效,因为Source属性是编译阶段Wix用来定位本地文件的,不会在安装时动态解析。正确配置方式如下:
配置步骤
- 使用
RemotePayload节点替代直接写Source属性,RemotePayload的DownloadUrl属性支持运行时变量解析,示例配置如下:
<ExePackage Id="CustomPrerequisite" DisplayName="应用前置依赖" InstallCommand="/quiet /norestart" DetectCondition="YourPrerequisiteDetectCondition" Vital="yes"> <RemotePayload Description="前置依赖安装包" ProductName="你的依赖产品名" Version="x.x.x.x" Size="你的setup.exe文件大小(单位字节)" Hash="你的setup.exe的SHA1哈希值" DownloadUrl="[WixBundleOriginalSourceFolder]issetupprerequisites\{9BA97839-8D57-467D-8FDF-487966F8A4C2}\setup.exe" /> </ExePackage>
- 补充参数说明:
DetectCondition替换为你自己的依赖检测逻辑,比如依赖对应版本的注册表项存在、目标路径下exe版本符合要求等,避免重复安装Size和Hash可以通过Wix自带的heat.exe工具生成,执行命令heat.exe file <你的setup.exe本地路径> -out payload.wxs即可从生成的文件中提取对应参数- 注意
[WixBundleOriginalSourceFolder]本身已自带末尾反斜杠,不需要额外加斜杠拼接路径,路径拼接错误是最常见的报错原因
- 分发要求:编译生成主Bundle exe后,将
issetupprerequisites文件夹和主exe放在同一目录下分发,不要修改文件夹内部结构即可适配任意安装源路径。
异常兜底处理
如果遇到用户将安装包放在磁盘根目录时路径解析异常的问题,可以增加自定义路径校验逻辑:
<!-- 先定义根路径变量 --> <Variable Name="PrereqBasePath" Type="string" Value="[WixBundleOriginalSourceFolder]" /> <!-- 校验路径是否存在 --> <util:DirectorySearch Id="SearchPrereqFolder" Path="[PrereqBasePath]issetupprerequisites\{9BA97839-8D57-467D-8FDF-487966F8A4C2}" Variable="PrereqFolderExists" Result="exists" />
内容的提问来源于stack exchange,提问作者Allokik
相关产品推荐
相关产品推荐

