首页 > 解决方案 > WIX MSI 条件

问题描述

在 Zabbix Agent MSI 中,当打开 MSI 时,有以下行:

<Condition Message="Please enter the name or IP address in the Zabbix server IP/DNS field !">NOT (NOT (Installed OR WIX_UPGRADE_DETECTED OR WIX_DOWNGRADE_DETECTED)) OR ((NOT (Installed OR WIX_UPGRADE_DETECTED OR WIX_DOWNGRADE_DETECTED)) AND ((UILevel<5 AND SERVER) OR UILevel=5))</Condition>

有人能解释一下逻辑吗?当以更明智的方式重写条件时:

NOT (
    NOT (Installed OR WIX_UPGRADE_DETECTED OR WIX_DOWNGRADE_DETECTED)
) OR (
    (NOT (Installed OR WIX_UPGRADE_DETECTED OR WIX_DOWNGRADE_DETECTED))
    AND ((UILevel<5 AND SERVER) OR UILevel=5)
)

因此,如果Installed=1由于双重原因而满足条件NOT(它不应该满足,因为该消息仅在未安装软件时才会出现,因此 MSI 中存在错误)。双NOT标毫无意义。

还是对上述条件有其他解释?

标签: wixinstallationzabbixwindows-installer

解决方案


这全部由 Windows Installer 的条件语句语法控制

https://docs.microsoft.com/en-us/windows/win32/msi/conditional-statement-syntax

您似乎正在尝试进行自定义 UI 工作,但我不知道所有这些与服务器名称 IP 地址有何关系。

在这些场景中,我有一个自定义操作来实现业务规则检查(伸出并触摸服务器或验证 FQDN/IP )并将属性设置为 1 或 0。然后我使用互斥控制事件(在内部发布带有 Condition 的元素text ) 生成一个说明存在问题的对话框或 NewDialog 向导循环的下一个对话框。


推荐阅读