【问题标题】:Correctly show component sizes with shared files使用共享文件正确显示组件大小
【发布时间】:2013-05-21 12:39:41
【问题描述】:

我有一个 inno 安装项目,其中包括 5 个不同的子程序,可作为组件安装。最终程序文件夹中的许多 dll 在其中一些(但不是全部)之间共享。我制作了一个工具来整理常见的 dll,以使我的安装程序尽可能紧凑。

由于共享部件,这些组件的空间需求根本不会出现。就其本身而言,这并不是一个真正的问题,但组件选择器底部的总大小似乎只是结合了为所有组件安装的文件,以及可以计算大小的组件的大小。

虽然由于共享文件而无法显示单个大小,但总大小是完全可以确定的。是否有可能以某种方式给用户一个正确的总大小估计?

在相关说明中...是否有一种简单的方法可以确保至少需要选择一个组件?简单地将 Components: 添加到 Files 中的每一行都不起作用。在使用IsComponentSelected 检查所有组件后,我目前在NextButtonClick 上只有一个错误框,但我想知道是否有更...​​优雅的解决方案,因为如果我需要添加更多组件,这需要修改代码(在当前的项目中,这是一个非常现实的可能性)。

【问题讨论】:

  • 请注意,如果公共 DLL 来自同一个源文件夹,那么 Inno 只会将它们的一份副本存储在安装程序中,即使您有多个将其复制到多个目标文件夹的 [Files] 条目。另请注意,使用Check 函数会从磁盘空间计算中删除文件(因为 Inno 无法确定哪些条件可能会改变结果),但否则它们应该按预期显示(并且磁盘空间标题确实说这是最小值)。
  • 关于需要一个选定组件的查询:您可以遍历项目WizardForm.ComponentsList并确保至少勾选一项;这是让它自动包含稍后添加的其他组件的唯一方法。但是,如果您还使用子组件,则需要小心。
  • “还要注意,使用检查函数会从磁盘空间计算中删除文件” - 啊,这解释了很多。安装程序中包含整个项目的两个不同构建(用于客户系统上的两个数据库架构),一开始就在自定义屏幕中进行选择。所以 all 条目有一个检查来区分这两者。我只是让他们两个安装程序,但我被要求将其设为一个。
  • 没有子组件,所以这不是问题。只是现有的组件有公用文件,从逻辑上讲,这些公用文件总是安装的,但是安装just没有任何组件的公用文件当然是完全没用的。
  • @Miral:您能否将第一条评论作为实际答案发布,以便我接受?这让我发现了真正的问题。

标签: inno-setup pascalscript


【解决方案1】:

如果在没有应用程序的情况下安装公共文件或没有公共文件的应用程序没有意义(例如,文件是应用程序的依赖项),那么根本不要将它们列为[Components] (组件只是 UI 的东西):

[Components]
Name: app1; Description: "Application 1"
Name: app2; Description: "Application 2"
Name: app3; Description; "Application 3"

[Files]
Filename: ...\app1.exe; ...; Components: app1
Filename: ...\app2.exe; ...; Components: app2
Filename: ...\app3.exe; ...; Components: app3
Filename: ...\common.dll; ...; Components: app1 app2

如果 app1 或 app2 中的一个或两个被选中,这将安装 common.dll,但如果两者都没有,则不会。是否选择了 app3 无关紧要。 (请注意,如果一个文件对所有组件都是通用的,那么您可以完全省略 Components: 参数。)

为了确保至少选择了一个组件,您需要遍历 NextButtonClick 中的 WizardForm.ComponentsList wpSelectComponents,或者(如果您不介意硬编码所有组件的名称components) 确保 IsComponentSelected 在提供所有组件的名称时返回 true。

【讨论】:

  • 请注意,如果一个文件对所有组件都是通用的,那么您可以完全省略 Components: 参数。 - 这实际上是问题所在,我认为.. . 这不是真的。如果您省略组件,则可以安装程序不选择任何组件,这将只安装常用文件。我认为您在这里遗漏了要点:问题不在于没有公共文件的应用程序安装 - 问题在于安装程序的能力公共文件,没有任何实际的组件.
  • 我不知道当你全部取消选择它们时,确保所有文件都链接到组件实际上是否会阻止继续通过组件屏幕。我还没有机会测试。
  • 它没有。但我已经在之前的评论中建议了如何解决这个问题。
  • 是的,我知道。这只是相当奇怪的行为。呃,好吧。感谢您的帮助,我会接受这个答案,即使您说的另一件事(关于文件大小和检查标志)对我更有用:p
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 2020-08-29
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多