WiX工具集是微软官方认可的基于XML的开源Windows安装包构建系统,直接调用MSI API,生成标准msi或exe安装包,支持企业级部署能力。

msi 或 exe(含引导程序),能通过 msiexec 部署、支持静默安装、策略组管理、修复/卸载事务等企业级能力。
WiX 项目结构和核心文件怎么组织
一个最小可构建的 WiX 项目至少包含三个部分:Product.wxs(主安装逻辑)、WixUI.wxs(可选 UI)、project.wixproj(MSBuild 项目文件)。WiX 不依赖 Visual Studio,但 VS 插件能提升编辑体验;命令行构建靠 candle.exe(编译 .wxs → .wixobj)和 light.exe(链接 .wixobj → .msi)。
-
Product.wxs必须有根节点,内嵌,且Id必须是合法 GUID(可用guidgen.exe或在线生成器) - 所有文件资源必须显式声明在
内,每个必须有唯一Id和一个Guid(用于 MSI 组件注册,不能为*除非开发阶段) -
层级需完整:从ProgramFilesFolder开始,逐级定义子目录,路径名区分大小写(如MyApp≠myapp)
wixstdba 和 Burn 引导程序怎么启用自定义 UI
Burn 是 WiX 的引导程序框架,用于打包多个 MSI、EXE 或处理运行时依赖(如 .NET 运行时)。默认 WixStandardBootstrapperApplication(wixstdba)只提供基础进度条;要加 logo、按钮文字或跳过 EULA,必须自定义 BootstrapperApplicationRef 并重写 Bundle.wxs 中的 和 。
- 修改安装包标题:在
节点设DisplayName属性,值会显示在控制面板“已安装程序”列表中 - 添加 .NET 检查:用
+WixNetFxExtension提供的NETFRAMEWORK45变量,失败时自动下载安装 - 静默安装参数:生成的
setup.exe支持/quiet(无 UI)、/norestart(不重启)、/log install.log(记录详细日志)
常见编译错误和对应 XML 修复方式
WiX 编译失败多数源于 XML 结构非法或 MSI 语义冲突,不是语法错误。例如 candle.exe 报 “The Component element contains an unhandled extension element 'File'” —— 实际是漏写了 包裹 ;而 light.exe 报 “ICE03: Invalid language ID” 则是 Product/@Language 值不是十进制整数(如误填 "1033" 带引号,应为 1033)。
-
error CNDL0005: The Product/@Version attribute's value, '1.0', is not a valid version string→Version必须为 x.y.z 格式(如1.0.0),不能含字母或前导零 -
error LGHT0217: Error while signing→ 若启用了-sval参数但未配置证书,删掉该参数或用signtool.exe单独签名生成的 .msi - 安装后找不到文件:检查
的Source属性是否为相对路径(相对于 .wxs 文件所在目录),且文件真实存在;绝对路径会被拒绝
WiX 的 XML 看似自由,实则每处属性都绑定 MSI 数据库表字段。最易被忽略的是
KeyPath:它决定组件是否“激活”,漏设会导致卸载时残留文件;而 Guid="*" 在生产环境必须替换为固定值,否则每次构建都会被视为新组件,引发升级失败。










