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
相关产品推荐
相关产品推荐

