使用IDP下载.zip文件:下载Inno安装程序的插件,并将其解压缩

时间:2015-04-05 20:44:11

标签: inno-setup pascalscript inno-download-plugin

抱歉我的英语。

您好  我的安装程序将通过添加"来下载文件。 IDP:下载Inno Setup的插件,"我有一个问题,因为它们是以.zip格式下载的,所以需要提取,是否可以解压缩应用程序的位置?它是一个附加组件还是什么? 请帮忙。

1 个答案:

答案 0 :(得分:2)

您可以运送您选择的解压缩工具并将其用于提取。

我倾向于发货" 7za" (7zip的命令行版本),因为我发现它的提取速度非常好(并且比解压缩更好)。

首先,您将提取工具集成到安装程序中。

    [Files]
    Source: ..\utils\unzip\7za.exe; DestDir: {tmp}; Flags: dontcopy
    Source: and some zip files ...

请注意dontcopy。在正常的文件复制阶段,这不会将文件复制到用户系统,而是将文件静态编译到安装中。

其次,您可以在DoUnzip部分添加一些[Code]辅助方法。

它将使用临时文件夹中的工具。

procedure DoUnzip(source: String; targetdir: String);
var 
    unzipTool: String;
    ReturnCode: Integer;
begin
    // source contains tmp constant, so resolve it to path name
    source := ExpandConstant(source);

    unzipTool := ExpandConstant('{tmp}\7za.exe');

    if not FileExists(unzipTool)
    then MsgBox('UnzipTool not found: ' + unzipTool, mbError, MB_OK)
    else if not FileExists(source)
    then MsgBox('File was not found while trying to unzip: ' + source, mbError, MB_OK)
    else begin
         if Exec(unzipTool, ' x "' + source + '" -o"' + targetdir + '" -y',
                 '', SW_HIDE, ewWaitUntilTerminated, ReturnCode) = false
         then begin
             MsgBox('Unzip failed:' + source, mbError, MB_OK)
         end;
    end;
end;

第三,提取解压缩工具,然后解压缩,然后只需在拉链上使用DoUnzip()方法。这些命令适用于[Code]部分。

  // extract 7za to temp folder
  ExtractTemporaryFile('7za.exe');

  // extract the zip to the temp folder (when included in the installer)
  // skip this, when the file is downloaded with IDP to the temp folder
  //ExtractTempraryFile('app.zip);

  targetPath := ExpandConstant('{tmp}\');

  // unzip the zip in the tempfolder to your application target path
  DoUnzip(targetPath + 'app.zip', ExpandConstant('{app}'));