如何从 [Code] 部分以 /VERYSILENT 模式中止 Inno Setup 安装?

How to abort Inno Setup installation in /VERYSILENT mode from [Code] section?

我正在尝试从 [Code] 部分(在 AfterInstall 处理程序中)启动某个 Windows 服务。当它无法启动时,我想回滚安装。

通常当设置从 UI 变为 运行 时,WizardForm.Close() 就可以正常工作。但是当使用 /verysilent 命令行参数执行安装程序时,WizardForm.Close 似乎被忽略并且安装继续进行。 我也尝试了 Abort(),这是 Stack Overflow 上的其他文章建议的,但它的工作方式与任何其他 suppressiblemsgbox 一样,不会破坏安装。

有什么方法可以在 /verysilent 模式下有条件地中止安装吗?

无法以编程方式触发回滚。

您所能做的就是使用ExitProcess WinAPI function强制中止安装。

procedure ExitProcess(exitCode:integer);
  external 'ExitProcess@kernel32.dll stdcall';

致谢:Exit from Inno Setup Installation from [code].


更简洁的解决方案是在 CurStepChanged(ssInstall). And use the Abort function to interrupt the installation, if something goes wrong. In this context the Abort works. See the function documentation.

开始时以编程方式安装文件并启动 Windows 服务

WizardForm.Show(); //强制显示即使非常安静