我们使用InstallShield 2010使用InstallScript方法安装我们的软件。可以根据需要安装一些先决条件。在OnBegin
回调中,我们在继续安装之前执行一些逻辑来验证系统。如果用户此时取消安装程序,则安装将退出,但不会卸载先决条件。我有几个问题。
1)是否可以在安装先决条件之前执行自定义验证?根据我读过的所有内容,这在InstallShield 2010中看起来不可行,但我希望确认这一点。
2)如果用户取消安装,是否有办法强制卸载先决条件?
3)是否有替代方案可以在OnBegin
回调后安装先决条件?我读到了与特定功能相关的先决条件,但目前还不清楚如何在UI中执行此操作。
答案 0 :(得分:1)
1)你的第一个问题的答案也可能是最简单的最合理的解决方案。您应该能够在其他先决条件之前运行自定义验证,方法是创建自己的prq文件,并将所有自定义验证逻辑包含在其中。要创建自己的.prq文件,只需复制SetupPrerequisites文件夹中的现有prq并重命名即可。然后在InstallShield中打开Redistributable视图。复制/重命名的.prq文件现在应该显示在列表中,您可以右键单击并选择Edit Prerequisite
。然后更改Properties
,Conditions
,Files To Include
,Application To Run
等。
例如,假设您的验证是一个可执行文件,它根据成功运行并设置注册表项。您可以检查注册表项是否存在,作为是否运行先决条件的条件,在Files to Include
选项卡中包含exe和任何依赖项,在Application to Run
选项卡中运行该可执行文件,以及在Behavior选项卡中设置如果仍未满足Abort the setup
对所有先决条件设置满意后,再次右键单击并选择Set prerequisite order...
,并确保自定义验证先决条件位于列表顶部。
2)是的,可能有一种方法可以运行一些自定义操作,以确保在回滚时卸载所有先决条件,但这看起来很复杂,我个人不会推荐它。如果用户已在其计算机上安装了先决条件,然后他们中止了您的安装并卸载了他们已在其计算机上安装的软件,该怎么办?他们可能不会对此感到高兴。
3)对此不完全确定,但我认为在先决条件运行之前执行OnBegin
函数是不可能的。我这样说是因为通常先决条件是通过Setup.exe或类似的东西在MSI执行之外启动的,至少从我的理解来看。然后在完成先决条件后启动MSI。如果OnBegin作为MSI执行的一部分运行(我相信它会运行),那么在启动先决条件之前无法启动它。
答案 1 :(得分:0)
在较新版本的InstallShield中提供的套件和套件/高级UI项目可以更直接地处理这个问题,但如果将OnBegin
放在OnBegin
之前将一个InstallScript安装包装在另一个安装程序中呢?
关于你的其他子问题......
先决条件以防火方式处理,旨在安装可能已存在的内容(并在此情况下跳过安装),因此无法直接支持卸载它们。
基本MSI项目中提供了功能先决条件。对于InstallScript项目,建议您使用包括LaunchApplication
或类似方法的脚本代码,但如果您不启动另一个InstallScript安装,最终可能需要重新实现先决条件式架构。