我使用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;
我该如何解决这个问题?
答案 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
...