Delphi 撤消或回滚安装

Delphi 撤消或回滚安装,delphi,installation,inno-setup,Delphi,Installation,Inno Setup,我想在我的后安装功能失败时执行回滚。这是我的代码示例 [Files] Source: "MyWinService.exe"; DestDir: "{app}"; Flags: ignoreversion; AfterInstall: MyAfterInstall Source: "MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion [Code] const WM_CLOSE = $0010; procedu

我想在我的后安装功能失败时执行回滚。这是我的代码示例

[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中单击Yes时,将执行回滚。我想要的是ExitSetupMsgBox不显示,因为我已经显示了MsgBox。因此,当我在MsgBox中单击OK时,将执行回滚


可以这样做吗?

您可以使用事件
取消按钮单击
打开确认对话框

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Cancel := True;
  Confirm := False;
end;
只需关闭WizardForm即可触发cancel方法,无需发送特殊消息即可调用
WizardForm.Close
这是我所知道的在
AfterInstall
事件期间取消安装的唯一方法

注意:如果您有

[setup]
AllowCancelDuringInstall=no

或者使用/NOCANCEL命令行选项运行安装程序。

您可以使用事件
取消按钮单击
打开确认对话框

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Cancel := True;
  Confirm := False;
end;
只需关闭WizardForm即可触发cancel方法,无需发送特殊消息即可调用
WizardForm.Close
这是我所知道的在
AfterInstall
事件期间取消安装的唯一方法

注意:如果您有

[setup]
AllowCancelDuringInstall=no

或者使用/NOCANCEL命令行选项运行安装程序。

这很好。但是,如果不单击“取消”按钮对话框,如何调用此事件?@patlimosnero-更新了有关如何避免发送消息的详细信息的答案。这很好。但是,如果不单击“取消”按钮对话框,如何调用此事件?@patlimosnero-更新了答案有关如何避免发送邮件的详细信息。