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

时间:2014-04-18 04:16:18

标签: inno-setup

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

当我运行'Setup_1.0.121.exe'时,它将在第一个屏幕出现前大约需要6分钟。    我的设置总大小为4.76GB,这是文件列表

  
      
  • Setup_1.0.121.exe:623,863 bytes
  •   
  • Setup_1.0.121-1a.bin:1,707,575,872字节
  •   
  • Setup_1.0.121-1b.bin:1,708,200,000 bytes
  •   
  • Setup_1.0.121-1c.bin:1,697,243,193 bytes
  •   

我试着深入了解procexp的初始流程是什么,并找到了这个

  
      
  • Setup_1.0.121.tmp:I / O读取字节5,085,307,002:I / O写入字节1,061,076
  •   

我的Setup_1.0.121.exe在初始阶段读取每个字节。这就是为什么花了这么长时间。

我怀疑是插件'Isskin'我只是添加装饰。

function InitializeSetup(): Boolean;
    begin
      ExtractTemporaryFile('Office2007.cjstyles');
      LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
      Result := True;
    end; 

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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

这可能是由[Files]库引起的,它是由脚本引擎提取的(如果你没有使用delayload标志),或者是手动提取{{1} ExtractTemporaryFile函数提供的skin文件。在此功能的参考中甚至有警告:

  

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

如果我对我的假设是正确的,并且你已经在这些巨大的数据文件下面列出了SolidCompression和临时文件,那么我们可以将你的脚本重建为:

ISSkin.dll

如果您仔细阅读本文,您已经知道答案在参考文献的引用中。您需要做的就是列出Office2007.cjstyles部分顶部的所有临时文件,以避免解压缩大文件。所以上面的脚本将成为:

[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
...