ISDone

DLL ISDone 0.6 final

Нет прав для скачивания

Street

Мимокрокодил
Всем привет сделал в ручную через FreeArc архивы но не как не могу подключить их к IsDone вечно ошибку выдает: "Hе найдено ни одного файла указанного для ISArcExtract". Я уже все остальное сделал осталось подключить арк архивы и сделать установщик.

Заранее спасибо
Код из установщика
Код:
[Files]
Source: "D:\CheMaxRus12.3\chemax.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\CheMaxRus12.3\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\setup\FreeArc\bin\arc.ini"; DestDir: {tmp}; Flags: dontcopy
Source: Data.arc; DestDir: {src}; Flags: recursesubdirs ignoreversion createallsubdirs
IsDone
  //    if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-1.arc'),     ExpandConstant('{app}'),                          false, '', '', ExpandConstant('{app}'),  notPCFonFLY  {PCFonFLY} ) then break;
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\Data.arc'),  ExpandConstant('{app}\'), false, '', '', '', notPCFonFLY ) then break;
        if not ISSRepExtract   ( 0, 0, ExpandConstant('{app}\Data.srep'), ExpandConstant('{app}\Data.pcf'), true                           ) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\Data.pcf'),  ExpandConstant('{app}\Data.7z'),  true                           ) then break;
        if not IS7ZipExtract   ( 0, 0, ExpandConstant('{app}\Data.7z'),   ExpandConstant('{app}\Data'),  true,  ''                      ) then break;

Место где лежит arc архив



В какую папку он должен распаковаться, мне нужна папка "Old" т.к. я запаковал файлы из этой папки
 

LexBell

Борода
Супер модератор
Street, Source: Data.arc; DestDir: {src}; Flags: recursesubdirs ignoreversion createallsubdirs эту строчку удали, а Data-1.arc положи рядом с инсталлятором.
 

Nikitun

Новичок
Помогите исправить ошибку при инсталляции. Паковал в сжатии данном на скрине, но инсталлятор не в какую не хочет его распаковывать, FreeArc при распаковке выдаёт такую тему:
ОШИБКА: ошибка записи (диск полон?) в алгоритме (рас)паковки srep:m3f:mem256mb

Спасибо.
 
Последнее редактирование:

Carlos

Участник
Модератор
Подскажите пожалуйста как в ISDone
Сделать чтобы компонент 4 не зависел от компонента 3.
Код:
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if BtnGetChecked(LanguagetextButton[1]) then Comps1:=Comps1+TmpValue;     //компонент 1
    TmpValue:=TmpValue*2;
    if BtnGetChecked(LanguagetextButton[2]) then Comps1:=Comps1+TmpValue;     //компонент 2
    TmpValue:=TmpValue*2;
    if BtnGetChecked(LanguagevoiceButton[1]) then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if BtnGetChecked(LanguagevoiceButton[2]) then Comps1:=Comps1+TmpValue;    //компонент 4
#endif
И здесь что поменять нужно?
Код:
function ENGVoice: Boolean;
begin
   result:= not IsDoneError and BtnGetChecked(LanguagevoiceButton[2]);
end;
procedure SelectLanguagevoice(hBtn:HWND);
begin
  BtnSetChecked(hBtn,True);
  if hBtn=LanguagevoiceButton[1] then begin
    BtnSetChecked(LanguagevoiceButton[2],False);
  end else begin
    BtnSetChecked(LanguagevoiceButton[1],False);
  end;
end;
procedure LanguageVoice1LabelClick(Sender:TObject);
begin
  BtnSetChecked(LanguagevoiceButton[1], not BtnGetChecked(LanguagevoiceButton[1]));
  SelectLanguagevoice(LanguagevoiceButton[1]);
end;
procedure LanguageVoice2LabelClick(Sender:TObject);
begin
  BtnSetChecked(LanguagevoiceButton[2], not BtnGetChecked(LanguagevoiceButton[2]));
  SelectLanguagevoice(LanguagevoiceButton[2]);
end;
 

Xabib2302

Новичок
Всем привет. Дайте пожалуйста скрипт только на распаковку arc архивов
 

Xabib2302

Новичок
Так вы скачайте архив. Там есть пример для распаковки.
Пример то есть, но не весь т.е без функций которые требуются для распаковки, так же в скрипте есть не нужные оформления инсталлятора, компоннты в разделе code и т.д и т.п
Дайте пожалуйста скрипт только для распаковки с нужными функциями, оформление инсталлятора
 

Xabib2302

Новичок
я хочу спросить. во время распаковки arc архивов я нажимаю отмена, но распаковка не прекращается. это так должно быть или нет.и как вернуть install page к прежнему оформлению, но и чтобы отображалась распаковка архива?
Код:
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define NeedSize "5000000000"

#define NeedMem 512

#define SecondProgressBar

#define MyAppName "ABBYY Lingvo х5 Professional"
#define MyAppVersion "15.0.826.26"
#define MyAppURL "https://href.li/?http://www.abbyy.ru/lingvo-windows/20languages_pro/"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={tmp}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} Lite RePack  by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=false
DisableProgramGroupPage=yes
#ifdef NeedSize
ExtraDiskSpaceRequired=0
#endif
DisableDirPage=yes

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Files]
Source: WinTB.dll; Flags: dontcopy;
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
Russian.ExtractedFile=Извлекается файл:
Russian.Extracted=Распаковка архивов...
Russian.CancelButton=Отменить распаковку
Russian.Error=Ошибка распаковки!
Russian.ElapsedTime=Прошло:
Russian.RemainingTime=Осталось времени:
Russian.EstimatedTime=Всего:
Russian.AllElapsedTime=Время установки:

[Run]
Filename: {app}\Setup.exe; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[ Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA             = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
BtnImage: TBitmapImage;
///////////////////////////////////////////
iInitialize: Boolean;
  LabelPct1,LabelCurrFileName: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  ISDoneCancel:integer;
  ISDoneError:boolean;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';

function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
  if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
  LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  Result := ISDoneCancel;
end;

///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure HideControls;
begin
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
#ifdef SecondProgressBar
  ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent   := WizardForm.InstallingPage;
    Height   := WizardForm.ProgressGauge.Height;
    Left     := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(365);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar1.Width+ScaleX(5);
    Top       := ISDoneProgressBar1.Top + ScaleY(2);
    Width     := ScaleX(80);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width+ScaleX(30);
    Left     := ScaleX(0);
    Top      := ScaleY(30);
  end;
#ifdef SecondProgressBar
  PBTop:=PBTop+ScaleY(25);
  ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar2 do begin
    Parent   := WizardForm.InstallingPage;
    Left     := ScaleX(0);
    Top      := PBTop+ScaleY(8);
    Width    := ISDoneProgressBar1.Width;
    Max      := 1000;
    Height   := WizardForm.ProgressGauge.Height;
  end;
  LabelPct2 := TLabel.Create(WizardForm);
  with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar2.Width+ScaleX(5);
    Top       := ISDoneProgressBar2.Top + ScaleY(2);
    Width     := ScaleX(80);
  end;
#endif
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectTasks:
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
end;
if (CurPageID = wpFinished) and ISDoneError then
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef facompress
    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
    ExtractTemporaryFile('English.ini');

    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
        if not ISArcExtract (0, 0, ExpandConstant('{src}\ABBYY_Lingvo_X5.xabib'), ExpandConstant('{app}'), '', false, 'khrushchev194023', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), false) then break;
          ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;
 
Последнее редактирование:

Xabib2302

Новичок
я хочу спросить. во время распаковки arc архивов я нажимаю отмена, но распаковка не прекращается. это так должно быть или нет?и и в FileNameLabel не отображается список извлекаемых фалов из инсталлятора. как вернуть?
Код:
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define NeedSize "5000000000"

#define NeedMem 512

#define SecondProgressBar

#define MyAppName "ABBYY Lingvo х5 Professional"
#define MyAppVersion "15.0.826.26"
#define MyAppURL "https://href.li/?http://www.abbyy.ru/lingvo-windows/20languages_pro/"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={tmp}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} Lite RePack  by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=false
DisableProgramGroupPage=yes
#ifdef NeedSize
ExtraDiskSpaceRequired=0
#endif
DisableDirPage=yes

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Files]
Source: WinTB.dll; Flags: dontcopy;
Source: C:\Windows\Fonts\*; DestDir: {app}\1111;
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
Russian.ExtractedFile=Распаковка файлов...
Russian.Extracted=Распаковка архивов...
Russian.CancelButton=Отменить распаковку
Russian.Error=Ошибка распаковки!
Russian.ElapsedTime=Прошло:
Russian.RemainingTime=Осталось времени:
Russian.EstimatedTime=Всего:
Russian.AllElapsedTime=Время установки:

[Run]
Filename: {app}\Setup.exe; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[ Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA             = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;
  LabelPct1,LabelCurrFileName: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
  ISDoneCancel:integer;
  ISDoneError:boolean;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';

function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := ExpandConstant('{cm:Extracted} ');
  LabelCurrFileName.Caption:=MinimizePathName(CurrentFile, LabelCurrFileName.Font, ScaleX(417));
  Result := ISDoneCancel;
end;

///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure HideControls;
begin
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(70);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent   := WizardForm.InstallingPage;
    Height   := WizardForm.ProgressGauge.Height;
    Left     := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(417);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ScaleX(0);
    Top       := ScaleY(30);
    Width     := ScaleX(417);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ScaleX(417);
    Left     := ScaleX(0);
    Top      := ScaleY(46);
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectTasks:
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
 end;
 if (CurPageID = wpFinished) and ISDoneError then
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:ExtractedFile}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef facompress
    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
    ExtractTemporaryFile('English.ini');

    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
        if not ISArcExtract (0, 0, ExpandConstant('{src}\ABBYY_Lingvo_X5.xabib'), ExpandConstant('{app}'), '', false, 'khrushchev194023', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), false) then break;
          ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;
 

ROMKA-1977

Новичок
Подскажите как в ISDone сделать распаковку архива arc только для win x64 ?
 

sergey3695

Ветеран
Модератор
Хамик, да :D
Код:
WizardForm.ProgressGauge.
- стандартный прогрессбар.
как в isdone сделать:
1. убрать что связано с новым ***: TNewProgressBar;
2. привязать к стандартному
Код:
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Position:=0;
вместо hide.
ну и позиция
Код:
function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then WizardForm.ProgressGauge.Position := OveralPct;
 
Сверху