2

我正在使用 Inno setup 来交付软件包。它会检测 Access 的版本并弹出一条消息。我想让消息告诉用户他们下载了错误的版本并停止安装。目前 Inno 脚本使用

itd_downloadafter(NoRuntimePage.ID);

显示一条消息,告诉用户他们需要安装 AccessRuntime。当他们用户按下下一步时,它会下载 AccessRuntime 并继续。我想为我的新脚本更改此设置,以告诉用户他们的版本错误,然后在他们按下一步或取消时结束安装脚本。谁能帮我解决这个问题?

4

2 回答 2

6

为什么要使用 InitializeSetup ?

如果要在向导启动之前有条件地退出设置,请不要使用带有异常引发InitializeWizard的事件函数。Abort您将浪费时间,需要创建整个向导表单。请改用InitializeSetup事件函数。在那里,您可以引发Abort异常或更好地将 False 返回到其布尔结果,并按预期退出函数 - 最终效果肯定是相同的。

在内部,当您从脚本中返回 False 时,该InitializeSetup函数只会引发此异常。AbortInitializeWizard事件相反,当InitializeSetup事件被触发时,向导表单还没有创建,所以你不会浪费时间,也不会使用系统资源。

代码示例:

在下面的伪代码中,您需要有一个函数UserDownloadedWrongVersion,如果您返回 True,则设置将终止,否则不会发生任何事情。

[Code]
function UserDownloadedWrongVersion: Boolean;
begin
  // make your check here and return True when you detect a wrong 
  // version, what causes the setup to terminate; False otherwise
end;

function InitializeSetup: Boolean;
begin
  Result := not UserDownloadedWrongVersion;
  if not Result then
  begin
    MsgBox('You''ve downloaded the wrong version. Setup will now exit!', 
      mbError, MB_OK);
    Exit;   // <-- or use Abort; instead, but there's no need for panic
  end;
end;
于 2012-08-23T19:21:54.903 回答
1

** TLama 的回答更准确。**

您可以使用 InitializeWizard 过程在开始时运行访问检查...如果失败,您应该能够显示您的消息框然后调用 Abort() 。

[code]
var CustomPage: TInputQueryWizardPage;

procedure InitializeWizard;
begin;
  {your checking Access version and message box}
  Abort();
end;
于 2012-08-23T19:20:42.487 回答