You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于包含文件自动计算Inno Setup组件所需磁盘空间

动态计算Inno Setup组件的ExtraDiskSpaceRequired值

问题场景

现有Inno Setup配置片段如下:

[Files]
Source: Src\MyApp\*.*; DestDir: {app}; \
    Flags: overwritereadonly ignoreversion recursesubdirs createallsubdirs;

[Components]
Name: "MyApp"; Description: "MyDescription"; Types: full custom; Flags: fixed; \
    ExtraDiskSpaceRequired: 384827392;

当Src\MyApp目录下的文件发生增减或大小变化时,需要手动修改ExtraDiskSpaceRequired的数值,希望通过FileSize/FileSize64函数实现该值的动态计算。

实现方案

Inno Setup的预处理阶段支持文件操作函数,可在编译时自动计算目标目录下所有文件的总大小,将结果赋值给常量后,直接在组件配置中引用即可。

步骤1:添加预处理计算代码

在脚本最顶部([Setup]段之前)插入以下预处理代码,递归遍历Src\MyApp下的所有文件并累加总大小:

; 初始化总大小为0
#define MyAppTotalSize 0

; 遍历根目录下的文件
#for /f "files" %%f in "Src\MyApp\*.*" do \
    #define MyAppTotalSize MyAppTotalSize + FileSize(%%f)

; 递归遍历所有子目录下的文件
#for /r "Src\MyApp" %%f in "*.*" do \
    #define MyAppTotalSize MyAppTotalSize + FileSize(%%f)

步骤2:修改Components段配置

将ExtraDiskSpaceRequired的值替换为预处理阶段定义的MyAppTotalSize常量:

[Components]
Name: "MyApp"; Description: "MyDescription"; Types: full custom; Flags: fixed; \
    ExtraDiskSpaceRequired: {#MyAppTotalSize};

适配大文件场景

如果Src\MyApp下的文件总大小超过2GB,改用FileSize64函数避免数值溢出,预处理代码调整为:

#define MyAppTotalSize 0
#for /f "files" %%f in "Src\MyApp\*.*" do \
    #define MyAppTotalSize MyAppTotalSize + FileSize64(%%f)
#for /r "Src\MyApp" %%f in "*.*" do \
    #define MyAppTotalSize MyAppTotalSize + FileSize64(%%f)

说明

  • 上述计算是在编译安装包时完成的,每次编译都会自动重新扫描文件并计算最新总大小,无需手动修改数值。
  • 预处理阶段的文件路径是相对于Inno Setup脚本所在目录的相对路径,请确保路径正确。

内容的提问来源于stack exchange,提问作者pburgr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:03:24