1)您的第一个问题的答案也可能是最简单最合理的解决方案。您应该能够通过创建您自己的包含所有自定义验证逻辑的 prq 文件来让您的自定义验证在其他先决条件之前运行。要创建自己的 .prq 文件,您只需复制 SetupPrerequisites 文件夹中的现有 prq 并重命名即可。然后在 InstallShield 中打开 Redistributable 视图。复制/重命名的 .prq 文件现在应该显示在列表中,您可以右键单击并选择Edit Prerequisite
. 然后更改Properties
, Conditions
, Files To Include
,Application To Run
等。
例如,假设您的验证是一个可执行文件,它根据成功运行并设置注册表项。您可以检查注册表项是否存在作为是否运行先决条件的条件,在选项卡中包含 exe 和任何依赖项,在Files to Include
选项卡中运行该可执行文件Application to Run
,并在“行为”选项卡中设置启动时会发生什么的下拉列表条件仍未满足Abort the setup
在您对所有先决条件设置感到满意后,再次右键单击并选择Set prerequisite order...
并确保您的自定义验证先决条件位于列表顶部。
2) 是的,可能有一种方法可以运行一些自定义操作,以确保在回滚时卸载所有先决条件,但这似乎很复杂,我个人不推荐这样做。如果用户已经在他们的机器上安装了先决条件,然后他们中止了您的安装并卸载了他们已经在他们的机器上安装的软件怎么办?他们可能对此不太高兴。
3)对此并不完全确定,但我认为不可能OnBegin
在先决条件运行之前执行该函数。我这么说是因为通常先决条件是由 Setup.exe 或类似的东西在 MSI 执行之外启动的,至少从我的理解来看是这样。然后在先决条件完成后启动 MSI。如果 OnBegin 作为 MSI 执行的一部分运行(我相信它确实如此),则在启动先决条件之前无法启动它。