我正在使用仅在首次安装期间需要调用exe的方式创建安装程序。 在进行任何升级时,不应调用自定义操作。
<CustomAction Id="MyExe"
Directory="INSTALLFOLDER"
ExeCommand=""[INSTALLFOLDER]MyExe.exe" /arg"
Execute="deferred"
Return="ignore"
Impersonate="no"
/>
并将序列/条件设置为:
<InstallExecuteSequence>
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
<Custom Action='MyExe' After='InstallFiles' >(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE)</Custom>
</InstallExecuteSequence>
我发现的行为是:
在MSI安装日志中,我可以看到已设置升级产品代码。我不确定如何从日志中确定它是否已安装。 我尝试将“ NOT UPGRADINGPRODUCTCODE”更改为“ UPGRADINGPRODUCTCODE”,然后CA没有在升级时运行。但是它当时也没有在初始安装上运行。
我将条件设置为在初始安装时运行错误吗?
使用Wix 3.11。
答案 0 :(得分:1)
主要升级和条件 :Please read this answer。您需要解决的主要事实是: 1)
一系列的旧产品卸载和 2)
安装过程一种新的安装方式-在发生顺序方面有所不同。因此,一种安装方式是卸载,另一种安装方式是安装。 You can use a debugging approach described here to check conditions。
本质上:
UPGRADINGPRODUCTCODE
仅在主要升级过程中要卸载的设置中进行设置。未在正在安装的新版本中设置它。因此,条件 UPGRADINGPRODUCTCODE
在安装设置中不成立,仅在卸载设置中不成立。WIX_UPGRADE_DETECTED
仅在使用WiX的MajorUpgrade元素的设置中设置,该设置检测到在安装过程中已卸载了另一个版本。
因此,条件 WIX_UPGRADE_DETECTED
在安装设置中适用,但在卸载设置中不适用。应用程序启动 :通常,您作为安装程序一部分运行的程序可以在首次启动应用程序时运行。在调试和测试方面非常容易(熟悉的上下文,没有模拟,没有排序,没有条件,与主应用程序相同的源代码以及易于调试的步骤)。简而言之:更可靠,更易于管理。对于质量检查小组的好处以及可以使用它来测试“整洁的情况”和/或升级方案的人。