【问题标题】:How to get Inno Setup to unzip a single file?如何让 Inno Setup 解压单个文件?
【发布时间】:2017-06-05 22:13:18
【问题描述】:

有没有办法从一个 zip 文件中只解压缩一个文件? 我将基于response 的代码用于 How to get Inno Setup to unzip a file it installed (all as part of the one installation process),非常适合解压缩,但不知道如何解压缩单个文件:

[Code]:

const
  NO_PROGRESS_BOX = 4;
  RESPOND_YES_TO_ALL = 16;

procedure UnZip(ZipPath, TargetPath: string); 
var
  Shell: Variant;
  ZipFile: Variant;
  TargetFolder: Variant;
begin
  Shell := CreateOleObject('Shell.Application');

  ZipFile := Shell.NameSpace(ZipPath);
  if VarIsClear(ZipFile) then
    RaiseException(Format('ZIP file "%s" does not exist or cannot be opened', [ZipPath]));

  TargetFolder := Shell.NameSpace(TargetPath);
  if VarIsClear(TargetFolder) then
    RaiseException(Format('Target path "%s" does not exist', [TargetPath]));

  TargetFolder.CopyHere(ZipFile.Items, NO_PROGRESS_BOX or RESPOND_YES_TO_ALL);
end;

【问题讨论】:

    标签: winapi zip inno-setup pascalscript


    【解决方案1】:

    使用Folder.ParseName 检索对 ZIP 存档“文件夹”中特定文件的引用。然后将该引用传递给Folder.CopyHere 以提取它。

    const
      NO_PROGRESS_BOX = 4;
      RESPOND_YES_TO_ALL = 16;
    
    procedure UnZip(ZipPath, FileName, TargetPath: string); 
    var
      Shell: Variant;
      ZipFile: Variant;
      Item: Variant;
      TargetFolder: Variant;
    begin
      Shell := CreateOleObject('Shell.Application');
    
      ZipFile := Shell.NameSpace(ZipPath);
      if VarIsClear(ZipFile) then
        RaiseException(Format('Cannot open ZIP file "%s" or does not exist', [ZipPath]));
    
      Item := ZipFile.ParseName(FileName);
      if VarIsClear(Item) then
        RaiseException(Format('Cannot find "%s" in "%s" ZIP file', [FileName, ZipPath]));
    
      TargetFolder := Shell.NameSpace(TargetPath);
      if VarIsClear(TargetFolder) then
        RaiseException(Format('Target path "%s" does not exist', [TargetPath]));
    
      TargetFolder.CopyHere(Item, NO_PROGRESS_BOX or RESPOND_YES_TO_ALL);
    end;
    

    【讨论】:

      【解决方案2】:

      我找到了一种可行的方法,不是我所期望的,而是实用的。

      UnZip(AppFolder+'\modulos\seimpresoras-2.2.zip', tmpFolder); 
      FileCopy(tmpFolder+'\seimpresoras\resources\default.properties', AppFolder+'\printers.properties', False);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多