主要更新的InstallShield自定义操作

问题描述:

我正在使用InstallShield并尝试在我的setup.exe处于主要升级模式时执行shell脚本(自定义操作)。 我很确定安装程序确实运行在MAJOR UPGRADE模式下,因为它首先卸载安装的版本,然后安装setup.exe版本。主要更新的InstallShield自定义操作

不过,我Behavior and Logic下添加的动作不会发生...... 我设置Install UI Sequence<First Action>install UI ConditionIS_MAJOR_UPGRADE,但没有..

凡在序列我要插入我的自定义操作(后如果我希望它在主要升级过程中和卸载开始时(在安装更新版本之前)发生)?

任何想法?我究竟做错了什么?

当安装程序作为主要升级的一部分被卸载时,它会以静默模式运行。这意味着没有GUI,您在InstallUISequence序列中插入的操作将永远不会运行 - 从技术角度而言,整个InstallUISequence将被跳过,并且只会运行InstallExecuteSequence。

我们需要知道您的操作是如何提供正确的建议。它是否对系统进行更改,还是仅显示信息或请求用户输入?如果您的自定义操作对系统进行更改,则应该将其插入InstallExecuteSequence中,而不是InstallUISequence中(不应从UI序列对系统进行更改)。在其他情况下,您应该将自定义操作插入到两个序列中 - 这完全取决于它在做什么。您是否使用Installshield Express btw?

您的条件IS_MAJOR_UPGRADE应该可以工作,但您也可以使用UPGRADINGPRODUCTCODE这是Windows Installer中的内置条件,前者是我相信的InstallShield自己的自定义条件。我更喜欢标准的Windows Installer属性。

对于自定义操作条件方便的图表,请看到的Flexera这个PDF(的InstallShield的制造商):https://resources.flexera.com/web/pdf/archive/IS-CHS-Common-MSI-Conditions.pdf。我没有测试过这些条件,请彻底测试。

使定制动作在意外时间运行的错误调节非常普遍。请务必仔细分析行动实际运行的时间。如果它应该在每次卸载时运行(不管它是由主要升级还是手动卸载启动的卸载),则更好的条件可能是:REMOVE~="ALL"(适用于所有卸载)。我个人喜欢在我的所有条件下添加NOT PATCH以防止所有自定义操作在修补模式下运行(我发现这种情况很少需要)。试试上面的链接图表来帮助你决定你的空调。

+0

非常感谢您的详细解答。其工作.. – Noam

+1

很高兴听到它。请记住,不要使用设置GUI中的即时模式自定义操作对系统进行更改 - 这些操作都将在静默模式下跳过,并且在静默运行时安装将不完整。对于运行带有提升权限的MSI安装的常规用户(即时模式操作拒绝权限),安装程序也会失败。有关详细信息,请阅读:[**本答案中的第10节**(以及该节中的链接答案)](https://*.com/questions/45840086/how-do-i-avoid-common-design -flaws功能于我 - 威克斯 - 微星部署的解决方案)。 –