Inno setup 在Inno安装程序中安装所有组件后结束安装

Inno setup 在Inno安装程序中安装所有组件后结束安装,inno-setup,pascalscript,Inno Setup,Pascalscript,我试图在所有组件都已安装时停止安装 安装示例: 第一次安装:一个组件安装 第二次安装:安装组件的其余部分 第三次安装:安装程序开始并直接转到wpfished页面或停止,并显示消息“所有组件都已安装” 我在这里和其他网站上做了一些研究,我做了以下工作: 过程取消按钮单击(CurPageID:Integer;var Cancel,Confirm:Boolean); 开始 确认:=假; 结束; 程序初始化; 变量 ItemIndex:整数; InstallEn:字符串; InstallFr:字符串;

我试图在所有组件都已安装时停止安装

安装示例:

  • 第一次安装:一个组件安装
  • 第二次安装:安装组件的其余部分
  • 第三次安装:安装程序开始并直接转到
    wpfished
    页面或停止,并显示消息“所有组件都已安装”
  • 我在这里和其他网站上做了一些研究,我做了以下工作:

    过程取消按钮单击(CurPageID:Integer;var Cancel,Confirm:Boolean);
    开始
    确认:=假;
    结束;
    程序初始化;
    变量
    ItemIndex:整数;
    InstallEn:字符串;
    InstallFr:字符串;
    InstallDe:字符串;
    CompDescEnIndex:整数;
    CompDescFrIndex:整数;
    CompDescDeIndex:整数;
    检查:整数;
    开始
    #这部分是为了使不可选择的组件已经安装
    如果RegQueryStringValue(HKLM,'Software\COMPANY\{{RegProduct}{RegCurVer}','Install ENG',InstallEn),则
    如果((InstallEn=‘国际包装’)
    或(InstallEn='Pack International')
    或(InstallEn='International Paket'))
    然后
    ItemIndex:=WizardForm.ComponentsList.Items.IndexOf(CustomMessage('CompDescEn'));
    WizardForm.ComponentsList.ItemEnabled[ItemIndex]:=False;
    如果RegQueryStringValue(HKLM,'Software\COMPANY\{{RegProduct}{RegCurVer}','Install FRA',InstallFr),则
    如果((InstallFr=‘法国包装’)
    或(InstallFr=‘法国包装’)
    或(InstallFr='Franzosisch Paket'))
    然后
    ItemIndex:=WizardForm.ComponentsList.Items.IndexOf(CustomMessage('CompDescFr'));
    WizardForm.ComponentsList.ItemEnabled[ItemIndex]:=False;
    如果RegQueryStringValue(HKLM,'Software\COMPANY\{{RegProduct}{RegCurVer}','Install DEU',InstallDe),则
    如果((InstallDe=‘德国包装’)
    或(InstallDe='Pack Allemand')
    或者(InstallDe='Deutsches-Paket'))
    然后
    ItemIndex:=WizardForm.ComponentsList.Items.IndexOf(CustomMessage('CompDescDe'));
    WizardForm.ComponentsList.ItemEnabled[ItemIndex]:=False;
    #在我尝试说是否所有组件都已安装后,请关闭向导。
    CompDescEnIndex:=WizardForm.ComponentsList.Items.IndexOf(CustomMessage('CompDescEn'));
    CompDescFrIndex:=WizardForm.ComponentsList.Items.IndexOf(CustomMessage('CompDescFr'));
    CompDescDeIndex:=WizardForm.ComponentsList.Items.IndexOf(CustomMessage('CompDescDe'));
    如果不是向导Form.ComponentsList.ItemEnabled[CompDescEnIndex]
    而不是WizardForm.ComponentsList.ItemEnabled[CompDescFrIndex]
    而不是WizardForm.ComponentsList.ItemEnabled[CompDescDeIndex]
    然后
    检查:=1;
    如果(勾选0),则
    向导窗体。关闭;
    结束;
    
    注意:代码可能不是很干净,我从Code部分的Pascal+Inno设置开始

    如果我的所有组件都已安装(且不可选),我希望向导停止而不继续

    我找不到直接进入
    wpFinished
    页面的解决方案。。。有办法吗

    如果由于
    WizardForm.Close而安装了所有组件,如何停止向导在我的情况下似乎不起作用


    谢谢您的帮助。

    您不能跳到
    wpFinished
    页面,因为Inno安装程序不允许您跳过
    wpReady
    页面,以避免创建全自动安装程序(可能会被滥用)


    您可以通过以下方式创建自定义“完成”页面:

    procedure AllInstalledPageActivate(发送方:TWizardPage);
    开始
    {将自定义页面上的“下一步”按钮更改为“完成”}
    WizardForm.NextButton.Caption:=设置消息(msgButtonFinish);
    {隐藏“取消”按钮}
    WizardForm.CancelButton.Visible:=False;
    结束;
    程序ExitProcess(UEXIT代码:UINT);
    外部的ExitProcess@kernel32.dllstdcall';
    函数AllInstalledPageNextButtonClick(发送方:TWizardPage):布尔值;
    开始
    {在自定义页面上单击“完成”按钮时中止安装程序}
    退出过程(0);
    结果:=真;{关闭编译器警告}
    结束;
    过程初始化Wizard();
    变量
    描述:特拉贝尔;
    AllInstalledPage:TWizardPage;
    开始
    ...
    {如果所有内容都已安装…}
    如果一切都停止了那么
    开始
    {…创建自定义的“已安装所有内容”页面}
    AllInstalledPage:=
    创建自定义页面(
    wpWelcome,‘所有组件都已安装’,
    “没有要安装的东西。”);
    AllInstalledPage.OnActivate:=@AllInstalledPage激活;
    AllInstalledPage.OnNextButtonClick:=@AllInstalledPageNextButtonClick;
    标题:=TLabel.Create(AllInstalledPage);
    说明.说明:=
    “一切都已经安装好了。单击“完成”关闭安装程序。“;
    标题.宽度:=AllInstalledPage.SurfaceWidth;
    Caption.Parent:=AllInstalledPage.Surface;
    结束;
    结束;
    

    更简单的解决方案是使用一个简单的


    向导.Close
    将关闭安装程序,但不会转到“完成”页面。如果确实要中止安装程序,请从返回
    False
    (需要将部分代码移到
    初始化设置中)


    或者使用,如我的示例中所示。

    您不能跳到
    wpFinished
    页面,因为Inno安装程序不允许您跳过
    wpReady
    页面,以避免创建全自动安装程序(这可能会被滥用)


    您可以通过以下方式创建自定义“完成”页面:

    procedure AllInstalledPageActivate(发送方:TWizardPage);
    开始
    {将自定义页面上的“下一步”按钮更改为“完成”}
    WizardForm.NextButton.Caption:=设置消息(msgButtonFinish);
    {隐藏“取消”按钮}
    WizardForm.CancelButton.Visible:=False;
    结束;
    过程ExitProcess(uExitCode:UIN