Publish element 指向的自定义操作仅在提供的整个条件评估为真时才会运行。
-
NOT Installed:适用于全新安装和重大升级。否则总是错误的。
-
WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1: 当属性设置为 1 时为真。
因此,将条件翻译成文字:仅当 WIXUI_EXITDIALOGOPTIONALCHECKBOX 也设置为 1 时,才在全新安装和主要升级安装时启动应用程序。否则不启动。必须同时满足这两个条件才能启动。
技术上:Installed 实质上是检查您正在安装的 MSI 的产品 GUID 是否已注册为已安装在系统上。如果是,则条件NOT Installed 的计算结果为真。
启动应用程序:是的,这可能有点令人困惑,但它确实如文档中所说:它使应用程序仅在 fresh install 和不在repair、modify、uninstall、minor upgrade patch(或其他安装模式)期间。
有趣的是,它应该(据我所知)导致应用程序在 交互式主要升级期间启动(Installed 不适用于安装在旧版本,但卸载设置确实如此 - 主要升级本质上是卸载旧版本并全新安装新版本)。
所以NOT Installed 似乎只适用于两种情况:全新安装和重大升级。您希望自动启动应用程序的两种情况?
由于在静默安装模式中跳过了InstallUISequence,因此在静默安装后将不会启动任何应用程序,因为您的对话框永远不会遇到(只有InstallExecuteSequence 运行)。 p>
题外话,类似问题 - LaunchCondition:I just commented on almost the same issue the other day 在LaunchConditions 的上下文中。如果您点击链接,请务必阅读 Phil 的后续评论。
使用上述以外的其他词:基本上 OR'd Installed 条件确保 LaunchCondition 仅适用于全新安装(或用于安装在顶部的新软件包的重大升级旧的)。这似乎是 WiX 家伙的一个漂亮功能 - 我注意到 Installshield does not seem to use this concept。我没有测试过这么多,但这似乎是一个不错的概念。
或者,正如 Phil 在上面的链接评论中所述,在 LaunchConditions 的上下文中,您可以调整 LaunchConditions actions 而不是使实际的 LaunchConditon 条件复杂化。不知道哪个更好。
更新:
一般情况:MSI 情况可能会很混乱。以下是一些可以解决这些问题的资源:
我倾向于提供另一个链接,但它有许多微妙的问题,我想在将人们发送到内容之前对其进行测试。