WIX Burn引导程序嵌入.NET 4.8实现单文件离线安装自定义MSI问题
问题原因
你的配置存在3处核心错误导致无法内置.NET 4.8安装包:
ExePackage的Compressed属性设为no,Burn会将其识别为外部负载,不会打包进最终exe- 多余声明了
Payload节点,和ExePackage的SourceFile属性冲突 - 主安装链里
MsiPackage的After属性值和依赖的.NET包ID不匹配
修正方案
第一步:修改自定义.NET 4.8包配置
找到你定义的NetFx48RedistPayload PackageGroup,修改为如下内容:
<PackageGroup Id="NetFx48RedistPayload"> <ExePackage InstallCommand="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48RedistLog].html"" RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx48RedistLog].html"" UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48RedistLog].html"" PerMachine="yes" DetectCondition="!(wix.NetFx48RedistDetectCondition)" InstallCondition="!(wix.NetFx48RedistInstallCondition)" Id="NetFx48Redist" Vital="yes" Permanent="yes" Protocol="netfx4" LogPathVariable="NetFx48RedistLog" Compressed="yes" SourceFile=".\Files\ndp48-x86-x64-allos-enu.exe"> </ExePackage> </PackageGroup>
第二步:修改主Bundle的安装链配置
修正MsiPackage的After属性,和依赖包ID匹配:
<Chain> <PackageGroupRef Id="NetFx48RedistPayload" /> <MsiPackage After="NetFx48Redist" SourceFile="$(var.ReferenceToOurMsi.Setup.TargetPath)" /> </Chain>
注意:请确保本地路径
.\Files\ndp48-x86-x64-allos-enu.exe存在正确的.NET 4.8全量离线安装包,否则编译阶段会抛出找不到源文件的错误。
修改完成后重新编译,即可得到内置.NET 4.8完整安装包的单exe引导程序,运行时不会触发联网下载或文件选择弹窗。
内容的提问来源于stack exchange,提问作者wormiii
相关产品推荐
相关产品推荐

