从一个安装切换到另一个安装时,Inno setup隐藏安装项目

Meleena

我需要你的帮助。

我想知道Inno是否有可能为2种产品设置2种不同的安装面罩(通过从下拉菜单中进行选择)。

我们将两种不同的安装称为“ SETUP”和“ PROGRAM”。

在安装“ SETUP”时,我们应该可以选中/取消选中
将要安装的A.exe,B.exe,C.exe和D.exe复选框(不应看到其他复选框)。

在安装“ PROGRAM”时,我们应该可以选中/取消选中A.exe,B.exe(“ SETUP”公用),F.exe和G.exe的框(不应看到其他框)。

我试图在[Components]部分中添加“ Flags:fixed”,但是无法隐藏链接到其他安装的复选框(从选择安装SETUP或PROGRAM的下拉菜单中,我们看到“灰色”复选框)。

有没有办法在安装“程序”时完全隐藏“ C.exe”和“ D.exe”,在安装“ SETUP”时完全隐藏“ F.exe”和“ G.exe”?

在此先感谢您的帮助。

Meleena。

TLama

为了在运行时隐藏组件,我唯一想到的方法(在当前版本中)是从组件列表中删除项目。目前,您只能通过组件描述来可靠地识别组件,因此此代码中的想法是列出组件描述,ComponentsList并通过其描述迭代和删除所有匹配的组件

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

[Components]
Name: "ProgramA"; Description: "{cm:CompDescrProgramA}";
Name: "ProgramB"; Description: "{cm:CompDescrProgramB}";
Name: "ProgramC"; Description: "{cm:CompDescrProgramC}";
Name: "ProgramD"; Description: "{cm:CompDescrProgramD}";

[CustomMessages]
; it's much better for maintenance to store component descriptions
; into the [CustomMessages] section
CompDescrProgramA=Program A
CompDescrProgramB=Program B
CompDescrProgramC=Program C
CompDescrProgramD=Program D

[Code]
function ShouldHideCD: Boolean;
begin
  // here return True, if you want to hide those components, False
  // otherwise; it is the function which identifies the setup type
  Result := True;
end;

procedure DeleteComponents(List: TStrings);
var
  I: Integer;
begin
  // iterate component list from bottom to top
  for I := WizardForm.ComponentsList.Items.Count - 1 downto 0 do
  begin
    // if the currently iterated component is found in the passed
    // string list, delete the component
    if List.IndexOf(WizardForm.ComponentsList.Items[I]) <> -1 then
      WizardForm.ComponentsList.Items.Delete(I);
  end;
end;

procedure InitializeWizard;
var
  List: TStringList;
begin
  // if components should be deleted, then...
  if ShouldHideCD then
  begin
    // create a list of component descriptions
    List := TStringList.Create;
    try
      // add component descriptions
      List.Add(ExpandConstant('{cm:CompDescrProgramC}'));
      List.Add(ExpandConstant('{cm:CompDescrProgramD}'));
      // call the procedure to delete components
      DeleteComponents(List);
    finally
      // and free the list
      List.Free;
    end;
  end;
end;

请注意,一旦您从中删除了这些项目ComponentsList,就无法将它们重新添加回去,因为每个项目都包含一个TItemState对象实例,该实例在删除时释放,并且无法从脚本中创建或定义此类对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从一个安装切换到另一个安装时,Inno setup隐藏安装项目

来自分类Dev

切换到另一个分区后,如何访问先前安装的内容?

来自分类Dev

从一个Windows安装到另一个安装的休眠HDD

来自分类Dev

是否可以在无需重新安装Windows的情况下将引导NVME SSD的PCIe插槽切换到另一个插槽?

来自分类Dev

如何将扩展程序从一个Chrome安装复制到另一个安装?

来自分类Dev

是否可以从一个GRUB安装引导到另一个GRUB安装?

来自分类Dev

无法将项目切换到另一个Visual Studio Online帐户

来自分类Dev

切换div以在点击时显示,而切换另一个以隐藏

来自分类Dev

如何将软件从一个系统迁移并安装到另一个系统?

来自分类Dev

如何将软件从一个系统迁移并安装到另一个系统?

来自分类Dev

从一个工作站到另一个工作站的Symlink,无需安装

来自分类Dev

如何将可引导的ubuntu安装从一个分区迁移到另一个分区

来自分类Dev

将现有Windows安装从一个SSD迁移到另一个SSD的效果?

来自分类Dev

将所有Nuget软件包从一个项目复制/粘贴(重新安装)到另一个项目的最快方法?

来自分类Dev

显示另一个时隐藏div-jQuery切换

来自分类Dev

当另一个打开时隐藏Div(切换)

来自分类Dev

当我使用Android Studio终端切换到另一个分支时,如何刷新项目文件?

来自分类Dev

在另一个端口安装phpmyadmin

来自分类Dev

在Linux中安装另一个Perl?

来自分类Dev

在另一个端口中安装phpmyadmin

来自分类Dev

从另一个系统安装/升级ubuntu

来自分类Dev

安装另一个Linux Distro

来自分类Dev

安装另一个Linux Distro

来自分类Dev

在Mac上安装另一个Eclipse

来自分类Dev

使用 * 安装包并忽略另一个

来自分类Dev

使用inno setup脚本完成安装后,应如何将文件从已安装目录复制到另一个目录?

来自分类Dev

是否可以在安装另一个软件包时卸载一个软件包

来自分类Dev

从另一个 ubuntu 安装安装带有已安装 ubuntu 的分区

来自分类Dev

一个applet是否可以安装另一个applet或发送APDU?

Related 相关文章

  1. 1

    从一个安装切换到另一个安装时,Inno setup隐藏安装项目

  2. 2

    切换到另一个分区后,如何访问先前安装的内容?

  3. 3

    从一个Windows安装到另一个安装的休眠HDD

  4. 4

    是否可以在无需重新安装Windows的情况下将引导NVME SSD的PCIe插槽切换到另一个插槽?

  5. 5

    如何将扩展程序从一个Chrome安装复制到另一个安装?

  6. 6

    是否可以从一个GRUB安装引导到另一个GRUB安装?

  7. 7

    无法将项目切换到另一个Visual Studio Online帐户

  8. 8

    切换div以在点击时显示,而切换另一个以隐藏

  9. 9

    如何将软件从一个系统迁移并安装到另一个系统?

  10. 10

    如何将软件从一个系统迁移并安装到另一个系统?

  11. 11

    从一个工作站到另一个工作站的Symlink,无需安装

  12. 12

    如何将可引导的ubuntu安装从一个分区迁移到另一个分区

  13. 13

    将现有Windows安装从一个SSD迁移到另一个SSD的效果?

  14. 14

    将所有Nuget软件包从一个项目复制/粘贴(重新安装)到另一个项目的最快方法?

  15. 15

    显示另一个时隐藏div-jQuery切换

  16. 16

    当另一个打开时隐藏Div(切换)

  17. 17

    当我使用Android Studio终端切换到另一个分支时,如何刷新项目文件?

  18. 18

    在另一个端口安装phpmyadmin

  19. 19

    在Linux中安装另一个Perl?

  20. 20

    在另一个端口中安装phpmyadmin

  21. 21

    从另一个系统安装/升级ubuntu

  22. 22

    安装另一个Linux Distro

  23. 23

    安装另一个Linux Distro

  24. 24

    在Mac上安装另一个Eclipse

  25. 25

    使用 * 安装包并忽略另一个

  26. 26

    使用inno setup脚本完成安装后,应如何将文件从已安装目录复制到另一个目录?

  27. 27

    是否可以在安装另一个软件包时卸载一个软件包

  28. 28

    从另一个 ubuntu 安装安装带有已安装 ubuntu 的分区

  29. 29

    一个applet是否可以安装另一个applet或发送APDU?

热门标签

归档