使用 WiX 3.6 我正在尝试创建一个 MSI 以静默安装内部产品。
在某些机器上,我的安装程序工作正常,但在其他机器上,安装程序失败并显示一条错误消息,指示属性值尚未从 UI 阶段传递到过程的安装阶段:
这个错误来自我的 WiX 源代码中的一个保护子句:
<Condition Message="The property SERVER must be defined on the commandline. Installation will abort.">
<![CDATA[Installed or SERVER]]>
</Condition>
为什么即使我在命令行上提供了属性 SERVER,我的 Guard 子句也会触发?
安装命令行:
msiexec /i 'C:\work\Excel.2010(x86).msi' SERVER=fsis-app-server ENVIRONMENT=Production SKIN=Black
根据我通过咨询谷歌教授所能找到的一切,我需要做的就是公开我的财产(通过使用所有大写的名称)并标记它Secure="yes"
:
<Property Id="SERVER"
Secure="yes"/>
我已经这样做了,但它仍然无法正常工作 - 有什么我错过的想法吗?
其他详情 ...
...我的安装程序配置为每次都作为 MajorUpgrade 运行。
...我专门部署到 Windows 7。在我的机器上(确实有这个问题),我有 Windows Installer。V 5.0.7601.17514
... 大多数机器升级正常,但少数(<10 出 200)因此错误而失败。我的机器是一台(有助于故障排除)。以前的版本未列在本机的程序和功能下。
更新#1
非常有趣,阅读日志。随着安装的进行,我的属性(例如 SERVER)不会丢失它们的值。
如果我正确阅读了日志,那么上一个MSI 显示的错误似乎是我的错误,而不是我当前正在运行的错误:
MSI (s) (D8:D0) [13:20:19:213]:产品:FSIS Plugin for Excel 2010(32 位)v4.7.1047.0 -- 必须在命令行上定义属性 SERVER。安装将中止。
我使用的安装程序是 v4.8.9999.0,所以旧版本号是我对正在发生的事情的线索……尽管这与我原始屏幕截图中的 v4.5.0.0 不匹配。
看来我还有两份工作……
...凝固汽油弹旧安装程序清理这台机器
...更改安装程序以防止再次发生。
更新#2
我已经确认我的失败发生在卸载时。
<Condition Message="The property SERVER must be defined on the commandline. Installation will abort.">
<![CDATA[Installed or SERVER]]>
</Condition>
为什么这个保护子句会触发和中止卸载?
我认为“安装或”的目的是让它在移除产品时正常工作。