Inno setup 使用共享文件正确显示零部件尺寸

Inno setup 使用共享文件正确显示零部件尺寸,inno-setup,pascalscript,Inno Setup,Pascalscript,我有一个inno安装项目,其中包括5个不同的子程序,可作为组件安装。最终位于最终程序文件夹中的许多DLL在其中一些DLL之间共享,但不是全部DLL。我已经做了一个工具来整理常见的DLL,使我的安装程序尽可能紧凑 由于共享的部分,这些组件的空间需求根本没有显示出来。就其本身而言,这并不是一个真正的问题,但组件选择器底部的总大小似乎只是将为所有组件安装的文件与可计算大小的组件大小合并在一起 由于共享文件的原因,无法显示单个大小,但总大小完全可以确定。有没有可能给用户一个正确的总尺寸估计值 另一方面。

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

由于共享的部分,这些组件的空间需求根本没有显示出来。就其本身而言,这并不是一个真正的问题,但组件选择器底部的总大小似乎只是将为所有组件安装的文件与可计算大小的组件大小合并在一起

由于共享文件的原因,无法显示单个大小,但总大小完全可以确定。有没有可能给用户一个正确的总尺寸估计值


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

如果在没有应用程序的情况下安装公共文件或没有公共文件的应用程序(例如,文件是应用程序的依赖项)没有意义,然后干脆不要将它们列为
[组件]
(组件只是一个UI组件):

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


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

请注意,如果公共DLL来自同一个源文件夹,则Inno将仅在安装程序中存储它们的一个副本,即使您有多个
[文件]
条目将其复制到多个目标文件夹。还要注意的是,使用
Check
函数可以从磁盘空间计算中删除文件(因为Inno无法确定哪些条件可能会改变结果),但如果不是这样,它们应该按预期显示(磁盘空间标题确实说明这是最小值).关于您关于需要一个选定组件的查询:您可以浏览items
向导表单。Components列表
并确保至少勾选了一个项目;这是让它自动包含以后添加的其他组件的唯一方法。但如果同时使用子组件,则需要小心。“还要注意,使用检查函数会从磁盘空间计算中删除文件”-啊,这解释了很多。安装程序中包含整个项目的两个不同版本(用于客户系统上的两个数据库体系结构),在一开始的自定义屏幕中由一个选项分隔。因此,所有条目都有一个检查来区分这两个条目。我只是让他们两个安装,但我被要求做一个。没有子组件,所以这不是一个问题。只是现有的组件有公共文件,从逻辑上讲,这些文件总是安装的,但是只安装公共文件而不安装任何组件当然是毫无用处的。@Miral:你能把第一条评论作为实际答案发布出来,这样我就可以接受吗?这就是我发现真正问题的原因。请注意,如果一个文件对所有组件都是通用的,那么您可以完全忽略组件:参数。-这就是问题所在,我想。。。事实并非如此。如果不安装组件,则可以不选择任何组件来安装程序,这将只安装公共文件。我认为你没有抓住要点:问题不在于没有公共文件的应用程序安装——问题在于只使用公共文件安装程序的能力,没有任何实际的组件。我不知道当你取消选择所有组件时,确保所有文件都链接到组件是否真的阻止了继续通过组件屏幕。我还没有机会测试它,它没有。但我在之前的评论中已经提出了解决这个问题的建议。是的,我知道。这只是很奇怪的行为。好吧。谢谢你的帮助,我会接受这个答案,尽管这是你说的对我更有用的另一件事(关于文件大小和检查标志):p
[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