You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup复制完文件后创建的自定义页面能否取消安装并回滚?

Inno Setup 自定义页面及取消回滚实现方案

1. 文件复制完成后创建自定义页面实现

你之前使用wpInstalling作为父页面ID的写法不对,这个ID对应的是文件复制过程中的进度页,要在所有文件复制完成后展示自定义页面,只需要将CreateCustomPage的第一个参数替换为wpFinished即可,示例代码如下:

Page := CreateCustomPage(wpFinished, 'expl', 'expl 2');

如果需要在文件复制刚结束、还未执行注册表写入/快捷方式创建等后续操作前展示页面,可以将第一个参数替换为wpPostInstall。

2. 自定义页面添加取消按钮并实现回滚

默认创建的自定义页面不会显示自带的取消按钮,你可以通过手动添加取消按钮并绑定回滚事件实现需求,完整示例代码如下:

[Code]
var
  CustomPage: TWizardPage;
  CustomCancelBtn: TNewButton;

// 取消按钮点击事件,触发安装回滚
procedure CustomCancelClick(Sender: TObject);
begin
  CancelInstall();
end;

procedure InitializeWizard();
begin
  // 创建文件复制完成后的自定义页面
  CustomPage := CreateCustomPage(wpFinished, '自定义页面标题', '自定义页面说明内容');
  
  // 手动创建取消按钮,位置和默认取消按钮保持一致
  CustomCancelBtn := TNewButton.Create(WizardForm);
  CustomCancelBtn.Parent := WizardForm;
  CustomCancelBtn.Caption := '取消';
  CustomCancelBtn.Left := WizardForm.CancelButton.Left;
  CustomCancelBtn.Top := WizardForm.CancelButton.Top;
  CustomCancelBtn.Width := WizardForm.CancelButton.Width;
  CustomCancelBtn.Height := WizardForm.CancelButton.Height;
  CustomCancelBtn.OnClick := @CustomCancelClick;
  CustomCancelBtn.Visible := False;
end;

// 页面切换时控制取消按钮的显隐
procedure CurPageChanged(CurPageID: Integer);
begin
  CustomCancelBtn.Visible := (CurPageID = CustomPage.ID);
end;

回滚逻辑说明

  • Inno Setup内置的CancelInstall()方法会自动触发完整的回滚流程,无需手动编写删除逻辑,所有已经复制的文件、写入的注册表项、创建的快捷方式等安装变更都会被自动清理。
  • 注意要确保[Setup]段中DisableRollback参数值为no(默认配置就是no,没有手动修改过不需要额外配置),否则回滚功能会被禁用。

内容的提问来源于stack exchange,提问作者Vladimir Yanakiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:08