当我的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时,将执行回滚。
可以这样做吗?
答案 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命令行选项运行您的设置。