Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup inno安装程序中使用wpInfoAfter创建的向导页面未显示取消按钮_Inno Setup - Fatal编程技术网

Inno setup inno安装程序中使用wpInfoAfter创建的向导页面未显示取消按钮

Inno setup inno安装程序中使用wpInfoAfter创建的向导页面未显示取消按钮,inno-setup,Inno Setup,我在inno中创建了一个自定义向导页面,在将文件安装到{app}文件夹后需要显示该页面。这是通过给出wpInfoAfter来实现的。 问题是,它只显示“下一步”按钮,没有取消/返回按钮,右上角的对话框关闭按钮也被禁用。我知道不需要“后退”按钮,因为它需要删除已安装的文件。是否可以显示“取消”按钮?由于InnoSetup不希望在安装过程完成后执行需要取消的进一步操作,取消按钮在安装后阶段没有任何功能。所以,即使你展示了这个按钮,你也会得到一个没有任何动作的按钮 我个人倾向于收集安装开始前需要的数据

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

由于InnoSetup不希望在安装过程完成后执行需要取消的进一步操作,
取消按钮在安装后阶段没有任何功能。所以,即使你展示了这个按钮,你也会得到一个没有任何动作的按钮

我个人倾向于收集安装开始前需要的数据库所需的信息,因为考虑用户安装应用程序时的情况,并简单地取消安装后向导(什么是容易发生的)。在此之前,您将能够强制您的用户在实际访问应用程序之前满足您的需求。但是,如果您在安装后仍然想这样做,这里有一个解决办法,可以解决缺少的取消按钮

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

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

[设置]
AppName=我的程序
AppVersion=1.5
DefaultDirName={pf}\My程序
[守则]
程序ExitProcess(UEXIT代码:UINT);
外部的ExitProcess@kernel32.dllstdcall';
变量
自定义页面:TWizardPage;
取消按钮:TNewButton;
程序OnCancelButtonClick(发送方:ToObject);
开始
//确认“退出设置?”消息,如果用户接受,则。。。
如果ExitSetupMsgBox,则
开始
//安装后停止并回滚您在中执行的操作
//处理并终止安装过程本身
退出过程(0);
结束;
结束;
程序初始化;
开始
//创建自定义页面
CustomPage:=CreateCustomPage(wpInfoAfter,'Caption','Description');
//创建一个取消按钮,设置其父按钮,隐藏它,设置边界
//和标题,并指定单击事件
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:=设置消息(msgButtonCancel);
CancelButton.OnClick:=@OnCancelButtonClick;
结束;
过程CurPageChanged(CurPageID:Integer);
开始
//仅当您在某些“后”屏幕上时才显示“取消”按钮
//安装网页;如果你有更多的页面,请使用类似这样的内容
//CancelButton.Visible:=(CurPageID>=FirstPage.ID)和

// (CurPageID按钮被隐藏,因为没有什么可取消的。你希望它做什么?即使是
取消
按钮本身也是反对的。单击它完全没有任何作用,因为正如@Deanna所说,当你完成安装过程时,没有什么可取消的。你不想制作自己的按钮来取消你的一些功能吗安装后处理向导(如果要执行此操作)?该向导实际上是要获取sql server详细信息,并且它看起来是空白的,没有任何关闭选项,这会迫使用户输入正确的详细信息以继续前进,因为任何错误的输入都不会继续,并且他们也不能将字段留空。因此,Think将有一个取消按钮。请建议。给他们一个跳过选项,或者询问正手。在其通常位置的“取消”按钮将意味着它将取消整个设置。因此,我可能会显示一个消息框,说明他们刚刚取消了此特定操作,而不是整个安装。应该可以吗?感谢@Tlama的回答,但是,正如建议我取消此计划一样,我现在显示此页面的时间要早得多,并且稍后再执行死刑。非常感谢。
[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;