撤消或回滚安装

时间:2011-06-08 04:55:10

标签: delphi installer inno-setup

当我的AfterInstall函数失败时,我想在IS中执行回滚。以下是我的代码示例。

[Files]
   Source: "MyWinService.exe"; DestDir: "{app}"; Flags: ignoreversion; AfterInstall:     MyAfterInstall
   Source: "MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
[Code]
   const
    WM_CLOSE = $0010;
   procedure MyAfterInstall();
   var
     exitCode: Integer;
   begin
      MsgBox (ExpandConstant('{cm:ErrServiceInstall}'), mbError, MB_OK);
      SendMessage(WizardForm.Handle, WM_CLOSE, 0, 0);
   end;

在这个示例中,我只是想直接取消安装,以便测试回滚安装。这里发生的是显示MsgBox后,由于SendMessage而显示ExitSetupMsgBox。当我在ExitSetupMsgBox中单击是时,将执行回滚。我想要的是ExitSetupMsgBox没有显示,因为我已经显示了MsgBox。因此,当我在MsgBox中单击OK时,将执行回滚。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用事件CancelButtonClick来转动确认对话框。

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Cancel := True;
  Confirm := False;
end;

您只需关闭WizardForm即可触发取消方法,无需发送特殊消息即可调用。 WizardForm.Close这是我知道在AfterInstall活动期间取消安装的唯一方法。

注意:如果您有

,这将不起作用
[setup]
AllowCancelDuringInstall=no

或使用/ NOCANCEL命令行选项运行您的设置。