inno-setup - 在 inno setup 中使用 wpInfoAfter 创建的向导页面不显示取消按钮

标签 inno-setup

我在 inno 中创建了一个自定义向导页面,需要在将文件安装到 {app} 文件夹后显示。这是通过提供 wpInfoAfter 来实现的。 问题是,它只显示“下一步”按钮,没有取消/后退按钮,右上角的对话框关闭按钮也被禁用。我知道不需要后退按钮,因为它需要删除已安装的文件。无论如何可以显示“取消”按钮吗?

最佳答案

Cancel 按钮在安装后阶段没有任何功能,因为 InnoSetup 不希望在安装过程完成后执行需要取消的进一步操作。因此,即使您针对该事实显示按钮,您也会得到一个没有任何操作的按钮。

我个人更愿意在安装开始之前收集设置数据库所需的信息,因为考虑到用户安装您的应用程序并简单地取消安装后向导(这种情况很容易发生)的情况。之前这样做,您将能够在用户实际访问应用程序本身之前强制他们填写您需要的内容。但是,如果您仍想在安装后执行此操作,这里有一个针对缺少的取消按钮的解决方法。

作为解决方法,您可以创建自己的自定义按钮,该按钮将位于具有相同功能的相同位置。这是一个示例脚本,模拟取消按钮并仅在安装过程后放置的自定义页面上显示它。这只是一种解决方法,因为您至少需要解决这个问题:

  • 启用向导表单的关闭十字(安装阶段完成后禁用)
  • 以某种方式处理 ESC 快捷键(它也会调用退出提示对话框,但我找不到解决此问题的方法)

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
procedure ExitProcess(uExitCode: UINT);
  external 'ExitProcess@kernel32.dll stdcall';

var
  CustomPage: TWizardPage;
  CancelButton: TNewButton;

procedure OnCancelButtonClick(Sender: TObject);
begin
  // confirmation "Exit setup ?" message, if user accept, then... 
  if ExitSetupMsgBox then
  begin
    // stop and rollback actions you did from your after install
    // process and kill the setup process itself
    ExitProcess(0);
  end;  
end;

procedure InitializeWizard;
begin
  // create a custom page
  CustomPage := CreateCustomPage(wpInfoAfter, 'Caption', 'Description');
  // create a cancel button, set its parent, hide it, setup the bounds
  // and caption by the original and assign the click event
  CancelButton := TNewButton.Create(WizardForm);
  CancelButton.Parent := WizardForm;
  CancelButton.Visible := False;
  CancelButton.SetBounds(
    WizardForm.CancelButton.Left, 
    WizardForm.CancelButton.Top, 
    WizardForm.CancelButton.Width,
    WizardForm.CancelButton.Height
  );  
  CancelButton.Caption := SetupMessage(msgButtonCancel);  
  CancelButton.OnClick := @OnCancelButtonClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  // show your fake Cancel button only when you're on some of your after
  // install pages; if you have more pages use something like this
  // CancelButton.Visible := (CurPageID >= FirstPage.ID) and 
  //   (CurPageID <= LastPage.ID);
  // if you have just one page, use the following instead
  CancelButton.Visible := CurPageID = CustomPage.ID;
end;

关于inno-setup - 在 inno setup 中使用 wpInfoAfter 创建的向导页面不显示取消按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12477403/

相关文章:

inno-setup - Innosetup,最佳实践自定义安装将变量传递给外部应用程序

url - 自定义 URL 协议(protocol)的 Inno Setup 注册表项

registry - 无法设置文件关联注册表

inno-setup - 如何在自定义页面处理后强制调用 Check 谓词

inno-setup - Inno Setup 在 [代码] 中检测所选语言

.net - InnoSetup 检测 .NET 项目的依赖关系

command-line - Inno Setup是否可以接受自定义命令行参数

inno-setup - Inno Setup中调用exe卸载

inno-setup - 如何为以前的 Inno Setup 安装自动设置 DefaultDirName?

inno-setup - 控制自定义页面在特定任务后显示