如何在WiX(Product.wxs)中检测是否安装Office 2010及以上版本?
嘿,我来帮你搞定在WiX的Product.wxs里检测Office 2010及以上版本的需求!核心思路是通过注册表搜索定位Office 2010+的专属键值,再用WiX的条件判断组合这些结果,完美排除2007及更早版本。
步骤1:定义注册表搜索属性
Office 2010及之后的版本会在注册表的固定路径留下安装痕迹,我们需要针对32位和64位Office分别搜索,覆盖所有安装场景:
在Product.wxs的<Product>标签内添加以下<Property>定义:
<!-- 检测32位Office 2010/2013/2016+/365 --> <Property Id="OFFICE2010_32" Secure="yes"> <RegistrySearch Id="Office2010_32_Search" Root="HKLM" Key="Software\Microsoft\Office\14.0\Common\InstallRoot" Name="Path" Type="raw" Win64="no" /> </Property> <Property Id="OFFICE2013_32" Secure="yes"> <RegistrySearch Id="Office2013_32_Search" Root="HKLM" Key="Software\Microsoft\Office\15.0\Common\InstallRoot" Name="Path" Type="raw" Win64="no" /> </Property> <Property Id="OFFICE2016PLUS_32" Secure="yes"> <RegistrySearch Id="Office2016PLUS_32_Search" Root="HKLM" Key="Software\Microsoft\Office\16.0\Common\InstallRoot" Name="Path" Type="raw" Win64="no" /> </Property> <!-- 检测64位Office 2010/2013/2016+/365 --> <Property Id="OFFICE2010_64" Secure="yes"> <RegistrySearch Id="Office2010_64_Search" Root="HKLM" Key="Software\Microsoft\Office\14.0\Common\InstallRoot" Name="Path" Type="raw" Win64="yes" /> </Property> <Property Id="OFFICE2013_64" Secure="yes"> <RegistrySearch Id="Office2013_64_Search" Root="HKLM" Key="Software\Microsoft\Office\15.0\Common\InstallRoot" Name="Path" Type="raw" Win64="yes" /> </Property> <Property Id="OFFICE2016PLUS_64" Secure="yes"> <RegistrySearch Id="Office2016PLUS_64_Search" Root="HKLM" Key="Software\Microsoft\Office\16.0\Common\InstallRoot" Name="Path" Type="raw" Win64="yes" /> </Property>
- 版本号对应:2010=14.0,2013=15.0,2016/2019/365共用16.0(微软统一了这几个版本的注册表版本标识)
Win64="yes/no":区分搜索64位/32位注册表路径,确保不遗漏任何安装类型Secure="yes":保证属性值在安装全程(包括权限提升场景)都能正常访问
步骤2:组合条件判断
接下来在<Product>标签内添加<Condition>元素,判断是否存在任意一个符合要求的Office版本:
<Condition Message="请先安装Microsoft Office 2010、2013、2016、2019或更高版本。"> <![CDATA[ (OFFICE2010_32 OR OFFICE2013_32 OR OFFICE2016PLUS_32 OR OFFICE2010_64 OR OFFICE2013_64 OR OFFICE2016PLUS_64) ]]> </Condition>
这个条件会在用户未安装指定版本Office时弹出提示,并终止安装流程。
额外说明
- 如果需要检测特定Office组件(比如仅检测Word/Excel),可以把注册表路径中的
Common替换为对应组件名,例如Software\Microsoft\Office\14.0\Word\InstallRoot - 无需额外处理2007及更早版本:因为我们只搜索2010+的注册表键,这些旧版本的键不会被匹配,自然会被视为“未安装”
内容的提问来源于stack exchange,提问作者Endrju
相关产品推荐
相关产品推荐

