当我的setup.exe处于主要升级模式时,我正在使用InstallShield并尝试执行shell脚本(自定义操作)。 我确信安装程序确实在MAJOR UPGRADE模式下运行,因为它首先卸载已安装的版本,然后安装setup.exe版本。
但是,我在Behavior and Logic
下添加的操作并未发生......
我将Install UI Sequence
设为<First Action>
,将install UI Condition
设为IS_MAJOR_UPGRADE
,但没有。
如果我希望在主要升级过程中和卸载开始时(安装更新版本之前),我应该在Sequence中插入自定义操作(在哪个序列之后)?
有什么想法吗?我做错了什么?
答案 0 :(得分:3)
在主要升级过程中卸载安装程序时,它会以静默方式运行。这意味着没有GUI,并且您在InstallUISequence序列中插入的操作将永远不会运行 - 在技术术语中,将跳过整个InstallUISequence,并且只运行InstallExecuteSequence。
我们需要知道您的行动正在做些什么才能提供正确的建议。是对系统进行更改,还是仅显示信息或请求用户输入?如果您的自定义操作对系统进行了更改,则应将其插入InstallExecuteSequence而不是InstallUISequence中(不应对UI序列中的系统进行任何更改)。在其他情况下,您应该将自定义操作插入到两个序列中 - 这一切都取决于它正在做什么。你使用的是Installshield Express btw吗?
IS_MAJOR_UPGRADE
的条件应该有效,但您也可以使用UPGRADINGPRODUCTCODE
这是Windows Installer中的内置条件,前者是InstallShield自己的自定义条件,我相信。我更喜欢标准的Windows Installer属性。
但是,你应该知道条件
UPGRADINGPRODUCTCODE
在安装设置中不存在,仅在卸载设置中。一世 相信IS_MAJOR_UPGRADE在安装设置中有效,但是 不在卸载设置中。它可以设置在两者中 - 我不是 当然。 See similar issue in the context of WiX
有关自定义操作条件的便捷图表,请参阅Flexera(InstallShield的制造商)提供的PDF文件: https://resources.flexera.com/web/pdf/archive/IS-CHS-Common-MSI-Conditions.pdf 。我没有测试过这些条件,请彻底测试。
使自定义操作在意外时间运行的错误调节非常常见。请仔细分析何时应该采取行动。如果它应该在每次卸载时运行(无论是由主要升级还是手动卸载启动的卸载),更好的条件可能是:REMOVE~="ALL"
(对所有卸载都有效)。我个人喜欢在我的所有条件中添加NOT PATCH
以防止所有自定义操作以补丁模式运行(我发现很少需要)。尝试上面的链接图表,以帮助您决定您的条件。