【发布时间】:2013-05-21 12:39:41
【问题描述】:
我有一个 inno 安装项目,其中包括 5 个不同的子程序,可作为组件安装。最终程序文件夹中的许多 dll 在其中一些(但不是全部)之间共享。我制作了一个工具来整理常见的 dll,以使我的安装程序尽可能紧凑。
由于共享部件,这些组件的空间需求根本不会出现。就其本身而言,这并不是一个真正的问题,但组件选择器底部的总大小似乎只是结合了为所有组件安装的文件,以及可以计算大小的组件的大小。
虽然由于共享文件而无法显示单个大小,但总大小是完全可以确定的。是否有可能以某种方式给用户一个正确的总大小估计?
在相关说明中...是否有一种简单的方法可以确保至少需要选择一个组件?简单地将 Components: 添加到 Files 中的每一行都不起作用。在使用IsComponentSelected 检查所有组件后,我目前在NextButtonClick 上只有一个错误框,但我想知道是否有更...优雅的解决方案,因为如果我需要添加更多组件,这需要修改代码(在当前的项目中,这是一个非常现实的可能性)。
【问题讨论】:
-
请注意,如果公共 DLL 来自同一个源文件夹,那么 Inno 只会将它们的一份副本存储在安装程序中,即使您有多个将其复制到多个目标文件夹的
[Files]条目。另请注意,使用Check函数会从磁盘空间计算中删除文件(因为 Inno 无法确定哪些条件可能会改变结果),但否则它们应该按预期显示(并且磁盘空间标题确实说这是最小值)。 -
关于需要一个选定组件的查询:您可以遍历项目
WizardForm.ComponentsList并确保至少勾选一项;这是让它自动包含稍后添加的其他组件的唯一方法。但是,如果您还使用子组件,则需要小心。 -
“还要注意,使用检查函数会从磁盘空间计算中删除文件” - 啊,这解释了很多。安装程序中包含整个项目的两个不同构建(用于客户系统上的两个数据库架构),一开始就在自定义屏幕中进行选择。所以 all 条目有一个检查来区分这两者。我只是让他们两个安装程序,但我被要求将其设为一个。
-
没有子组件,所以这不是问题。只是现有的组件有公用文件,从逻辑上讲,这些公用文件总是安装的,但是安装just没有任何组件的公用文件当然是完全没用的。
-
@Miral:您能否将第一条评论作为实际答案发布,以便我接受?这让我发现了真正的问题。