Inno setup inno设置:设置初始阶段需要6分钟吗?

Inno setup inno设置:设置初始阶段需要6分钟吗?,inno-setup,Inno Setup,我使用Inno安装程序制作游戏安装程序,但发现了一些问题 当我运行“Setup_1.0.121.exe”时,在第一个屏幕出现之前大约需要6分钟。 我的安装程序总大小为4.76GB,这是文件列表 Setup_1.0.121.exe:623863字节 设置_1.0.121-1a.bin:17075872字节 设置_1.0.121-1b.bin:1708200000字节 设置_1.0.121-1c.bin:1697243193字节 我试着深入查找procexp的初始过程,发现了这个问题 Setu

我使用Inno安装程序制作游戏安装程序,但发现了一些问题

当我运行“Setup_1.0.121.exe”时,在第一个屏幕出现之前大约需要6分钟。 我的安装程序总大小为4.76GB,这是文件列表

  • Setup_1.0.121.exe:623863字节
  • 设置_1.0.121-1a.bin:17075872字节
  • 设置_1.0.121-1b.bin:1708200000字节
  • 设置_1.0.121-1c.bin:1697243193字节
我试着深入查找
procexp
的初始过程,发现了这个问题

  • Setup_1.0.121.tmp:I/O读取字节5085307002:I/O写入字节1061076
我的Setup_1.0.121.exe在初始阶段读取每个字节。这就是为什么要花这么长时间

我的嫌疑犯是addon'Isskin'我只是为了装饰而添加的

function InitializeSetup(): Boolean;
    begin
      ExtractTemporaryFile('Office2007.cjstyles');
      LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
      Result := True;
    end; 
如何解决此问题?

如果您正在使用(我假设您正在使用),并且在
[files]
部分中的那些大文件之后列出了任何临时文件(
ISSkin.dll
和/或
Office2007.cjstyles
),那么初始化需要很长时间,因为安装程序正在提取这些临时文件之前列出的所有文件

这可能是由
ISSkin.dll
库引起的,该库是为脚本引擎加载而提取的(如果未使用标志),或者是由函数手动提取
Office2007.cjstyles
皮肤文件。此函数的引用中甚至有警告:

启用实体压缩后,请确保列出临时 位于[文件]部分顶部(或附近)的文件。为了提取 在固态压缩安装中的任意文件,必须先安装 解压缩所有以前的文件(到内存中的临时缓冲区)。这个可以 如果列出了许多其他文件,则会导致严重延迟 在[Files]部分的指定文件上方

如果我的假设是正确的,并且您已经启用了下面列出的这些大型数据文件和临时文件,那么我们可以将您的脚本重建为如下内容:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
SolidCompression=yes

[Files]
; first are listed huge files
Source: "Setup_1.0.121.exe"; DestDir: "{app}"
Source: "Setup_1.0.121-1a.bin"; DestDir: "{app}"
Source: "Setup_1.0.121-1b.bin"; DestDir: "{app}"
Source: "Setup_1.0.121-1c.bin"; DestDir: "{app}"
; if SolidCompression is enabled, all the prior files are extracted
; when any of the the following files is extracted
Source: "ISSkin.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "Office2007.cjstyles"; DestDir: "{tmp}"; Flags: dontcopy
...
如果你仔细阅读这篇文章,你已经知道答案就在参考文献的引文中。您只需在
[files]
部分的顶部列出所有临时文件,以避免解压缩大型文件。因此,上述脚本将变成:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
SolidCompression=yes

[Files]
; first are listed temporary files
Source: "ISSkin.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "Office2007.cjstyles"; DestDir: "{tmp}"; Flags: dontcopy
; the huge files are now extracted just when they are needed
Source: "Setup_1.0.121.exe"; DestDir: "{app}"
Source: "Setup_1.0.121-1a.bin"; DestDir: "{app}"
Source: "Setup_1.0.121-1b.bin"; DestDir: "{app}"
Source: "Setup_1.0.121-1c.bin"; DestDir: "{app}"
...

你有没有试着去除皮肤看看这是不是真正的原因?好的。问题解决了。这是我的错。我只是删除了不必要的isskin函数,一切正常。嗯,解决了吗?好吧,你说ISSkin对你来说是不必要的,好吧,但不是所有你可以通过移除它来“解决”的事情。想象一下你将如何“解决”例如头痛:)