检查WiX语法的正确性

时间:2018-08-15 19:52:23

标签: wix windows-installer

我有 Googled 并找到了以下资源:

但是我仍然不确定我要添加的语法是否正确。这有效吗?

<Custom Action="CAInstall" After="CAInstall.SetCustomActionData">NOT Installed or REINSTALL="ALL" or NOT (REMOVE="ALL")</Custom>

我想添加的部分是最后一个条件:

or NOT (REMOVE="ALL")

2 个答案:

答案 0 :(得分:2)

WiX安装程序项目(或任何带有产品根元素的源文件的candlelight编译)将构建Windows Installer程序包(.msi)。 Windows Installer是实际的引擎,并且是Windows的一部分。

因此,语法的这一部分是Windows Installer的Conditional Statement Syntax

这是有效的语法

NOT Installed or REINSTALL="ALL" or NOT (REMOVE="ALL")

它也可以写为

NOT Installed or REINSTALL="ALL" or REMOVE~="ALL"

(我不知道是否能确定您所遇到的情况。)

答案 1 :(得分:2)

  

条件 :如果您将该条件分配给自定义操作,则该条件将运行   在所有安装模式下(手动卸载卸载)   由重大升级启动。因此应该是 fresh install repair modify {{1} } self-repair 。请注意以下主要升级的内容。

     

请注意,有一些特殊的安装模式或子模式很少经过正确测试: minor upgrade -本质上是 suspended install ( AFTERREBOOT和RESUME属性),并且有 installations resumed after reboot rollback 模式可以运行,除非禁用-可能还有更多。这些是其他方式的“方面”,换句话说,它们可以或将视情况适当调用。

Here Be Dragons :您应注意,该操作仍将在主要升级过程中运行,只是不会从正在卸载的旧设置中进行。相反,它将从安装更新的应用程序的新设置(下一个版本)运行-前提是您还没有在新设置中更新条件的情况下出现。

孔子说 :此“ 从新版本运行”或“ 从旧版本运行”问题可以非常令人困惑,并且由于可以切换卸载与安装的顺序(顺序),因此情况变得更糟。换句话说,旧版本可能在安装新版本之前被卸载,或者在新版本被安装之后被卸载。如果您尝试访问文件,那么这可能会影响磁盘上存在的文件。在您的设置尝试访问它们时,它们可能已经被卸载。这完全取决于您如何整体配置事物。


自定义操作 :自定义操作很困难。这是我对它们的宣传:Why is it a good idea to limit the use of custom actions in my WiX / MSI setups?这并不是说它们不是必需的-有时它们是必需的,但是您必须尽可能地避免使用它们。在此处的第一部分中,还有一些不需要的自定义操作的检查清单:How do I avoid common design flaws in my WiX / MSI deployment solution?。本质上,您应该请勿出于以下目的使用自定义操作:对commit,对install services,对install to the GAC,对run .NET installer classes,对{{1 }}或类似的内容。


某些链接