Inno Setup:如何从regserver错误中删除Abort?

时间:2017-05-10 20:46:16

标签: registry inno-setup

我想知道,如果有办法显示消息框,则regserver部分的Files标记出现错误时,只显示重试忽略选项,而不是 Abort

我知道那里有一面旗帜noregerror。我不想显示错误。我想展示它,但只有两个选项。

有时在尝试注册OCX / DLL时显示错误时,当用户点击重试时,它会在第二次工作。如果用户单击取消,安装程序将回滚所有内容,从我的更新程序中删除文件。

感谢。

1 个答案:

答案 0 :(得分:1)

无法自定义这些按钮。

但您可以使用RegisterServer在代码中实现注册。然后你可以任何你喜欢的方式处理错误。实际上你甚至可以自动重试注册,你似乎真的想要做什么。

虽然实现重试/忽略消息框并不容易。以下代码使用简单的是/否

[Files]
Source: "MyDll.dll"; DestDir: "{app}"; AfterInstall: RegServer

[Code]

procedure RegServer;
var
  FileName: string;
  Message: string;
  Retry: Boolean;
begin
  repeat
    Retry := False;
    FileName := ExpandConstant(CurrentFilename);
    try
      { First argument indicates if DLL is 64-bit }
      RegisterServer(False, FileName, True);
    except
      Message :=
        FileName + #13#10#13#10 +
        FmtMessage(SetupMessage(msgErrorRegisterServer), [AddPeriod(GetExceptionMessage)]) +
          #13#10#13#10 +
        'Do you want to retry registration? ' +
        'Click Yes to try again or No to proceed anyway (not recommended).';
      Retry := (MsgBox(Message, mbError, MB_YESNO) = IDYES);
    end;
  until (not Retry);
end;

Registration error