Wix安装程序JRE安装检测异常问题排查求助
问题分析与解决方案
从你提供的MSI日志里,关键的线索是这条:
Ignoring disallowed property JREINSTALLED
这说明你的JREINSTALLED属性没有被标记为公共属性,导致在MSI的执行序列中被忽略——即使AppSearch已经成功找到了JRE版本,这个属性值也无法正确传递到条件判断的环节,最终触发了错误提示。
1. 修复公共属性标记
在WiX中,只有全大写且标记为安全的公共属性才能在MSI的不同序列(比如UI序列和执行序列)之间传递,尤其是在需要提升权限的安装场景下。修改你的Property定义,加上Secure="yes":
<Property Id="JREINSTALLED" Secure="yes"> <RegistrySearch Id="JRE_CURRENT_VERSION_REGSEARCH" Root="HKLM" Key="SOFTWARE\JavaSoft\Java Runtime Environment" Name="CurrentVersion" Type="raw" Win64="no" /> </Property>
Secure="yes"会将属性标记为安全的公共属性,确保它能在整个安装过程中保留值,不会被MSI的权限机制过滤掉。
2. 排查注册表重定向问题
你设置了Win64="no",这意味着如果你的安装包是32位的,在64位系统上运行时,它会被注册表重定向到HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment,而不是你检查的HKLM\SOFTWARE路径。
- 打开注册表编辑器(
regedit.exe),导航到HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment,确认这里存在CurrentVersion键值且值正确。 - 如果你的目标是支持64位JRE,可以根据安装包的位数调整
Win64属性:- 64位安装包:设置
Win64="yes",读取HKLM\SOFTWARE下的原生64位注册表项。 - 32位安装包:保持
Win64="no",但要确保32位JRE已安装(对应Wow6432Node下的注册表项)。
- 64位安装包:设置
3. 验证条件判断时机
确保你的<Condition>元素是在AppSearch之后执行的。默认情况下,WiX的LaunchCondition序列会在AppSearch之后运行,但如果你的自定义序列调整了顺序,可能导致条件判断在属性值被填充前执行。你可以通过查看MSI日志中AppSearch和LaunchCondition的顺序来确认。
补充验证
修改后重新生成安装包,再次查看MSI日志:
- 确认不再出现
Ignoring disallowed property JREINSTALLED的提示。 - 检查条件判断环节的日志,确认
JREINSTALLED的值被正确读取。
内容的提问来源于stack exchange,提问作者Dreamcatcher
相关产品推荐
相关产品推荐

