使用Wix C#能否制作支持32位和64位MS Office插件的单一安装包?
WiX单安装包兼容32/64位Excel插件实现方案
核心实现逻辑
安装时自动检测目标设备安装的Excel位数,动态部署对应架构的插件文件与注册信息,无需拆分两个独立安装包。
具体实现步骤
- 准备对应架构的插件二进制
提前编译生成32位、64位两个版本的Excel插件文件,分别存放到源码目录的独立路径下,比如\Bin\x86\MyExcelAddin.dll、\Bin\x64\MyExcelAddin.dll,给两个版本的文件配置不同的WiX组件ID,避免标识冲突。 - 添加Excel位数检测逻辑
通过WiX的注册表搜索能力,定位Excel的安装路径判断位数,示例代码如下:
<!-- 检测64位Excel安装状态 --> <Property Id="EXCEL_64_INSTALLED"> <RegistrySearch Id="SearchExcel64" Root="HKLM" Key="SOFTWARE\Microsoft\Office\16.0\Excel\InstallRoot" Name="Path" Win64="yes" Type="raw" /> </Property> <!-- 检测32位Excel安装状态 --> <Property Id="EXCEL_32_INSTALLED"> <RegistrySearch Id="SearchExcel32" Root="HKLM" Key="SOFTWARE\Microsoft\Office\16.0\Excel\InstallRoot" Name="Path" Win64="no" Type="raw" /> </Property>
上述代码适配Office 2016及以上版本,如需兼容更低版本,可新增对应版本号的注册表搜索项(Office 2013对应15.0、2010对应14.0)。
- 配置组件安装条件
给对应架构的插件组件加上安装条件,实现按需部署:
- 32位插件组件的Condition配置为
EXCEL_32_INSTALLED AND NOT EXCEL_64_INSTALLED - 64位插件组件的Condition配置为
EXCEL_64_INSTALLED - 若设备同时安装两个版本Excel,可自行调整条件优先级选择要安装的插件版本
- 配置安装包基础属性
将安装包的目标平台设置为x86,x86安装包可同时运行在32位、64位Windows系统上,无需额外适配操作系统架构。 - 适配注册逻辑
插件的COM注册、Excel加载项注册表配置也要对应拆分32位、64位两个版本,加上和组件一致的安装条件,64位相关的注册项需添加Win64="yes"属性,确保写入正确的注册表节点。
注意事项
- 所有64位插件相关的Component、RegistrySearch节点都必须添加
Win64="yes"属性,避免文件被错误写入到Program Files (x86)或者SysWOW64目录 - 插件的COM注册信息优先使用heat工具自动生成,不要用自定义动作实现注册,避免权限不足导致注册失败
- 测试时需要分别覆盖32位系统、64位系统装32位Excel、64位系统装64位Excel三种场景验证兼容性
内容的提问来源于stack exchange,提问作者Dinesh Conan
相关产品推荐
相关产品推荐

