Peuchele bio photo

Peuchele

Pedí pollo que yo pago la diferencia!

Email

Inno setup script to zip a directory using Windows built-in compression.

function MakeBackup(indir, outfile: String): Boolean;
var
  res: Boolean;
  fso: Variant;
  winShell: Variant;
  f: Variant;
  inObj: Variant;
  outObj: Variant;
begin
  res := FALSE;
  try
    fso := CreateOleObject('Scripting.FileSystemObject');
    winShell := CreateOleObject('shell.application');
    // create a new clean zip archive
    f := fso.CreateTextFile(outfile, TRUE);
    f.write('PK' + Chr(5) + Chr(6) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0));
    f.close;
    inObj := winShell.NameSpace(indir);
    outObj := winShell.NameSpace(outfile);
    outObj.CopyHere(inObj.Items);
    repeat
      Sleep(1000);
    until outObj.Items.Count = inObj.Items.Count;
    res := TRUE;
  except
  end;
  Result := res;
end;

// Sample usage

procedure CurStepChanged(CurStep: TSetupStep);
var
  timestamp: String;
  bkprc: Boolean;
begin
  if CurStep = ssInstall then begin
    timestamp := GetDateTimeString('yyyymmdd_hhnnss', #0, #0);
    bkprc := MakeBackup(ExpandConstant('{app}'), ExpandConstant('{app}') + '\..\' + timestamp + '.zip');
    if bkprc = FALSE then begin
      if MsgBox('Backup failed. Are you sure you want to continue?', mbConfirmation, MB_YESNO) = IDNO then
        Abort();
    end;
  end;
end;

See compress.iss on gist

Inspired by:

Inno Setup – zip local files prior to an update

Can Windows built-in ZIP compression be scripted?