为了防止安装程序运行,当先决条件测试失败时,只需返回False
来自InitializeSetup。这甚至会在向导显示之前退出安装程序。
function InitializeSetup(): Boolean;
begin
Result := True;
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, IDOK);
Result := False;
end;
end;
![enter image description here](https://i.stack.imgur.com/mpmJt.png)
如果您只需要在安装开始之前测试先决条件(即InitializeSetup
太早了),您可以致电Abort功能来自CurStepChanged(ssInstall):
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, IDOK);
Abort;
end;
end;
end;
![enter image description here](https://i.stack.imgur.com/AVulM.png)
尽管对于这种情况,请考虑使用PrepareToInstall事件函数机制,而不是退出设置。
function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
Result := '';
if not PrerequisitesTest then
begin
Result := 'Prerequisites test failed';
end;
end;
![enter image description here](https://i.stack.imgur.com/p4Oru.png)
如果您需要在其他时间强制终止安装程序,请使用ExitProcess
WinAPI 调用:
procedure ExitProcess(uExitCode: Integer);
external '[email protected] stdcall';
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = wpReady then
begin
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, IDOK);
ExitProcess(1);
end;
end;
Result := True;
end;
尽管这是相当不安全的退出,所以仅将其用作最后的手段。如果加载了任何外部 DLL,您可能需要先卸载它,以避免崩溃。这也不会清理临时目录。
![enter image description here](https://i.stack.imgur.com/FAoSS.png)