WiX4 Toolkit构建Bundle时触发WIX7506错误的求助
问题描述
我正在使用Visual Studio和Heatwave学习WiX Toolset,已完成多个示例项目:
- 编辑/读取Windows注册表
- 编辑/读取Windows/用户环境变量
- 收割(harvesting)文件、文件夹及项目引用(projectreferences)
- 使用并修改UI
尝试构建包含依赖项的MSI Bundle时,Visual Studio抛出以下错误:
WIX7506 The validation .wixpdb file: 'path to file' was not from a Windows Installer database build (.msi or .msm). Verify that the output type was actually an MSI Package or Merge Module.
环境信息:Windows 10系统,WiX 4.0.1版本
相关源码如下:
wixproj 文件
<Project Sdk="WixToolset.Sdk/4.0.0"> <ItemGroup> <None Include="license.rtf" /> </ItemGroup> <ItemGroup> <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.1" /> <PackageReference Include="WixToolset.Netfx.wixext" Version="4.0.1" /> </ItemGroup> </Project>
Package.wxs 文件
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:netfx="http://wixtoolset.org/schemas/v4/wxs/netfx"> <Bundle Name="3.1_InstallNetFramework Bundle" Manufacturer="MyCompany" Version="1.0.0.0" UpgradeCode="68652e01-f08b-4335-80aa-178eae53c4e5" > <BootstrapperApplication> <bal:WixStandardBootstrapperApplication Theme="rtfLicense" LicenseFile="license.rtf"/> </BootstrapperApplication> <Chain> <!--Install netFramework version 4.7.2--> <PackageGroupRef Id="NetFx472Web"/> <!--Install the actual app--> <!--<MsiPackage Id="App1Install" SourceFile="01_InstallerWithUI.msi"/>--> </Chain> </Bundle> </Wix>
license.rtf 文件
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}} {\colortbl ;\red0\green176\blue80;\red192\green192\blue192;} {\*\generator Riched20 10.0.19041}\viewkind4\uc1 \pard\sa200\sl276\slmult1\f0\fs22\lang7 This is an example License.\par It holds \ul no\ulnone meaning.\par \par Thank you for your \cf1 interest\cf0 in this \highlight2\i project\highlight0\i0 .\par }
问题原因及修复方法
原因
WiX 4默认会对项目输出运行Windows Installer数据库验证,但Bundle(引导程序包)的输出是.exe文件,并非MSI/MSM数据库格式,验证逻辑对其不适用,因此触发WIX7506错误。
修复方法
修改wixproj文件,添加属性禁用Bundle项目的验证步骤:
在<Project>节点内加入以下配置:
<PropertyGroup> <!-- 禁用Bundle的Windows Installer数据库验证 --> <RunWixValidation>False</RunWixValidation> </PropertyGroup>
修改后的完整wixproj:
<Project Sdk="WixToolset.Sdk/4.0.0"> <PropertyGroup> <RunWixValidation>False</RunWixValidation> </PropertyGroup> <ItemGroup> <None Include="license.rtf" /> </ItemGroup> <ItemGroup> <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.1" /> <PackageReference Include="WixToolset.Netfx.wixext" Version="4.0.1" /> </ItemGroup> </Project>
也可以通过Visual Studio界面设置:右键项目 → 属性 → 生成 → 取消勾选"Run Windows Installer validation"选项。
补充说明
- 该验证仅对MSI/MSM项目有意义,Bundle项目无需执行此步骤,禁用后不会影响Bundle的功能与正确性。
- 若解决方案中同时存在MSI项目,可单独为其启用验证,两者互不影响。
内容的提问来源于stack exchange,提问作者Arkarin0
相关产品推荐
相关产品推荐

