WiX Bundle配置:如何正确包含第三方EXE及配套支持文件
解决WiX Bundle中第三方驱动安装程序的目录依赖问题
要让WiX在执行Install_x64.exe前自动创建X64文件夹并解压支持文件,你可以通过<ExePackage>搭配<Payload>元素实现,核心是指定文件的解压目录结构,并确保exe在正确的工作目录执行。
具体实现步骤
- 配置主
ExePackage元素,指定驱动安装程序的路径,同时设置WorkingDirectory确保exe在自身解压目录运行 - 用
<Payload>元素逐个添加X64文件夹下的所有支持文件,通过TargetDirectory参数指定解压后放入X64子目录
代码示例
<Bundle Name="YourAppBundle" Version="1.0.0.0" Manufacturer="YourCompany" UpgradeCode="YOUR-GUID-HERE"> <Chain> <!-- 你的主MSI安装包 --> <MsiPackage SourceFile="YourApplication.msi" Vital="yes" /> <!-- 第三方驱动安装包 --> <ExePackage SourceFile="ThirdPartyDrivers/Install_x64.exe" WorkingDirectory="." InstallCommand="/silent" <!-- 根据驱动的静默安装参数调整 --> Vital="yes" Permanent="yes"> <!-- 打包X64文件夹下的所有支持文件 --> <Payload SourceFile="ThirdPartyDrivers/X64/support.dll" TargetDirectory="X64" /> <Payload SourceFile="ThirdPartyDrivers/X64/config.dat" TargetDirectory="X64" /> <!-- 其他支持文件依次添加 --> </ExePackage> </Chain> </Bundle>
关键说明
<Payload>的TargetDirectory="X64"会让WiX在Install_x64.exe的临时解压目录下自动创建X64文件夹,并将对应支持文件放入其中WorkingDirectory="."确保Install_x64.exe在自身解压目录执行,此时该目录下已经存在X64文件夹和所需支持文件,满足程序的路径要求- 如果支持文件数量较多,可以使用WiX的
heat.exe工具自动扫描目录生成Payload元素,避免手动逐个添加,命令示例:
然后在Bundle中引用这个PayloadGroup:heat dir "ThirdPartyDrivers/X64" -dr X64 -cg DriverPayloadGroup -out DriversPayload.wxs<ExePackage ...> <PayloadGroupRef Id="DriverPayloadGroup" /> </ExePackage>
测试注意事项
- 安装时可以查看系统临时目录(
%TEMP%)下的随机命名文件夹(Bundle的临时解压目录),确认X64文件夹和支持文件是否正确生成 - 确保
Install_x64.exe的安装参数符合第三方驱动的要求,比如静默安装参数是否正确
内容的提问来源于stack exchange,提问作者Alex Gdalevich
相关产品推荐
相关产品推荐

