我有 Googled 并找到了以下资源:
但是我仍然不确定我要添加的语法是否正确。这有效吗?
<Custom Action="CAInstall" After="CAInstall.SetCustomActionData">NOT Installed or REINSTALL="ALL" or NOT (REMOVE="ALL")</Custom>
我想添加的部分是最后一个条件:
or NOT (REMOVE="ALL")
答案 0 :(得分:2)
WiX安装程序项目(或任何带有产品根元素的源文件的candle
和light
编译)将构建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 }}或类似的内容。
某些链接 :