如何制作64位MSI?配置后安装路径仍异常的技术问询
解决WiX 64位安装程序仍安装到x86目录的问题
你已经做了不少基础配置,但显然还是踩了WiX 64位安装的几个常见坑,我来帮你一步步排查和解决:
1. 先锁定项目全局构建平台设置
很多人容易忽略Visual Studio里的全局平台配置,这是最常见的根源:
- 右键解决方案 → 属性 → 配置属性 → 确保解决方案平台选择
x64 - 右键WiX项目 → 属性 → 生成 → 平台目标选择
x64
如果这里还是x86,哪怕你在wxs里写了再多64位配置,最终构建出来的还是32位安装包,会自动导向Program Files (x86)目录。
2. 检查Package元素的完整配置
确保你的Package元素同时设置了Platform="x64"和InstallerVersion="500"(或更高版本),而且没有被其他wxs文件里的Package元素覆盖:
<Package Id="*" InstallerVersion="500" Platform="x64" Compressed="yes" InstallScope="perMachine" />
另外InstallScope="perMachine"也很关键,64位安装包推荐全局安装,避免权限和路径逻辑混淆。
3. 修复heat.exe生成的组件问题
你提到加了-platform x64参数没效果,大概率是heat生成的组件没自动带上Win64="yes"属性,可以这样处理:
- 确认heat的参数顺序正确:正确命令格式是
heat.exe dir "你的目标目录" -platform x64 -out output.wxs,参数位置错误可能会被程序忽略 - 如果还是没生成
Win64="yes",可以手动在生成的wxs里给所有Component标签加上该属性,或者用XSLT转换批量处理 - 同时检查heat生成的
DirectoryRef是不是指向ProgramFiles64Folder,而不是默认的ProgramFilesFolder(x86目录)
4. 验证Directory结构的一致性
确保所有子目录都是基于ProgramFiles64Folder创建的,比如:
<Directory Id="ProgramFiles64Folder" Name="PFiles64"> <Directory Id="INSTALLFOLDER" Name="你的应用名称" /> </Directory>
绝对不要在任何地方引用ProgramFilesFolder(这是x86版本的目录),哪怕是不小心复制粘贴的旧代码片段。
5. 检查candle和light的完整命令行
除了给candle加-arch x64,还要确保light.exe的配置正确:
- candle命令示例:
candle.exe -arch x64 -out obj\x64\Release\ src\*.wxs - light命令示例:
light.exe -out bin\x64\Release\你的安装包.msi obj\x64\Release\*.wixobj
如果light没有正确调用x64的中间编译文件,也会导致最终包还是32位逻辑。
最后验证:检查MSI属性
安装包构建完成后,用Orca工具打开MSI文件,查看Property表中的Platform值是否为x64,ProgramFilesFolder是否指向C:\Program Files\而非x86版本。如果这里不对,说明前面的配置还有遗漏。
内容的提问来源于stack exchange,提问作者Pablo Fernandez




