0

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

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

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

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

4

1 回答 1

0

如果在没有应用程序的情况下安装公共文件或没有公共文件的应用程序没有意义(例如,文件是应用程序的依赖项),那么根本不要列出它们[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:完全省略该参数。)

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

于 2013-06-27T04:45:19.680 回答