我们使用InstallShield 2010通过InstallScript方法安装我们的软件。可以根据需要安装一些必备组件。在OnBegin回调中,在继续安装之前,我们执行一些逻辑来验证系统。如果用户在此时取消安装程序,安装将退出,但不会卸载系统必备组件。我有几个问题。
1)是否可以在安装必备组件之前执行自定义验证?根据我所读到的所有内容,这在InstallShield 2010中似乎是不可能的,但我希望得到证实。
2)如果用户取消安装,有没有办法强制卸载系统必备组件?
3)有没有可以在OnBegin回调之后安装必备组件的替代方案?我读到一些关于绑定到特定功能的前提条件,但不清楚如何在UI中做到这一点。
发布于 2014-05-29 04:36:06
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执行的一部分运行的(我相信它是这样的),那么在启动先决条件之前,它不能启动。
发布于 2014-05-29 20:15:35
在较新版本的InstallShield中提供的套件和套件/高级UI项目可以更直接地处理这一点,但是将OnBegin放在OnBegin之前,通过将一个InstallScript安装包装在另一个安装中如何?
关于你的其他子问题...
系统必备组件是以“一发即忘”的方式处理的,并且被设计为安装可能已经存在的东西(在这种情况下跳过安装),因此不直接支持卸载它们。
基本MSI项目中提供了功能前提条件。对于InstallScript项目,鼓励您使用包括LaunchApplication或类似方法的脚本代码,但是,如果您不只是启动另一个InstallScript安装,这最终可能需要重新实现必备样式的体系结构。
https://stackoverflow.com/questions/23917658
复制相似问题