ISDone

DLL ISDone 0.6 final

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

IGROman

Новичок
ExtractedPath - используется для распаковки части архива. Указывается имя папки, которая будет извлечена. Если данная фитча не требуется, то оставляйте данный параметр пустой строкой. Значение '*' распаковывает весь архив с последующим извлечением всех подкаталогов из корневых папок архива (мож кому понадобится);
распаковывается сама папка с ее содержимым или толкьо ее содержимое?

если сама папка то можно сделать так чтобы распаковывалось только содержимое?
 
Последнее редактирование модератором:

TERRAN

Новичок
Проверенный
распаковывается сама папка с ее содержимым или толкьо ее содержимое?

если сама папка то можно сделать так чтобы распаковывалось только содержимое?
Например:
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\data-d.bin'), ExpandConstant('{app}\'), 'rus', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
В этом случае распаковывается содержимое папки "rus", включая подкаталоги.
 

SteelRat

Мимокрокодил
Мне нужно перевести страницу распаковки на русский, английский, французский, немецкий и испанский языки (файлы переводов сам создам и переведу). Судя по системе переводов в этом плагине, я могу использовать только Английский и Русский язык?
Попробовал распаковать при установке в temp французский язык и указать ChangeLanguage('French'), в итоге на странице распаковки получил ошибку "Language file not found: French.ini", хотя он явно присутствует в каталоге temp во временной папке инсталлятора.
 

LexBell

Борода
Супер модератор
хотя он явно присутствует в каталоге temp во временной папке инсталлятора.
А ты точно его туда распаковываешь? Если файл нот фоунд, то его точно нет. или ошибка в названии файла - проверь внимательнее.
 

SteelRat

Мимокрокодил
А ты точно его туда распаковываешь? Если файл нот фоунд, то его точно нет. или ошибка в названии файла - проверь внимательнее.
Точно. Название - French.ini. Находится в папке Temp. Распаковал файл "russian.ini", написал ChangeLanguage('russian') - выбивает ошибку: "Language file not found: russian.ini". Походу разработчик захардкодил English и Russian, а про остальные языки забыл.

Вот кусок кода:
Код:
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then begin
	ExtractTemporaryFile('russian.ini');
	ChangeLanguage('russian');
  end;
end;
 
Последнее редактирование:

Snoopak96

Старожил
Такое ощущение, что там фильтрация языков стоит
Кто-то видимо постоянно сидит и фильтрует :rofl:


сделано через French.ini

Вопрос был изначально сформулирован не верно: Почему в диалоговом окне при выборе языка нет француского и и т.д. - а только английский и русский? - полагаю так. Ответ: а он у тебя в системе установлен? т.к. инстал проверяет наличие установленных языков системе при старте.
 

SteelRat

Мимокрокодил
Только что попробовал установить на винде с английским языком интерфейса. Выбрал English, так же само на странице распаковки выбивает "Language file not found: English.ini". Файл English.ini лежит во временной папке, создаваемой инсталятором сразу после его запуска (распаковываю в InitializeWizard). Не понимаю почему он не может подхватиться? Где в моём коде ошибка? Что конкретно делает функция ChangeLanguage?

Вопрос был изначально сформулирован не верно: Почему в диалоговом окне при выборе языка нет француского и и т.д. - а только английский и русский? - полагаю так.
У меня в диалоговом окне все 5 нужных мне языков, но когда я выбираю например Французский, то весь интерфейс инсталятора действительно становится на французском, кроме страницы распаковки, которую создает этот плагин. И на странице распаковки выпадает такая ошибка, хотя файл французского языка явно распаковался в temp и я указал, чтобы плагин на него переключился.
Ответ: а он у тебя в системе установлен? т.к. инстал проверяет наличие установленных языков системе при старте.
Да, у меня в системе действительно, кроме русского нет никаких установленных языков. Что значит "инстал проверяет наличие установленных языков системе при старте"? Всмысле InnoSetup или этот плагин проверяет?
[MOD=Gnom]Что-бы выяснить, где ты накосячил, нужно видеть весь твой код, а не две строчки.[/MOD]
 
Последнее редактирование модератором:

Snoopak96

Старожил
SteelRat
Всмысле InnoSetup или этот плагин проверяет?
Естественно InnoSetup.

Пример использования English.ini:
Код:
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: [B][COLOR="Red"]English[/COLOR][/B]; MessagesFile: compiler:Default.isl

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy

[B][[/B]Code[B]][/B]
....
....
....
procedure [B]CurStepChanged[/B](CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.CancelButton.OnClick := @CancelButtonOnClick;
    ISDoneCancel:=0;
 // Экстрактим файлы для распаковки
....
....
 // Экстрактим файлы ini
[B][COLOR="Red"]ExtractTemporaryFile('English.ini');[/COLOR][/B]
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue;     //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue;     //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 4
//    .....
// см. справку
#endif
#ifdef precomp
  PCFVer:={#precomp};
#else
  PCFVer:=0;
#endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, 0, @ProgressCallback) then begin
      repeat
        [COLOR="Navy"][B]if ActiveLanguage = 'English' then ChangeLanguage('English');[/B][/COLOR] // если выбран англлийский при старте юзаем English.ini
        if not SrepInit(ExpandConstant('{app}\'),256,0) then break;
        if not PrecompInit(ExpandConstant('{app}\'),128,PCFVer) then break;
        if not FileSearchInit(true) then break;     //Если юзаем ISFindFiles то вкл поиск в подкатологах.
....
....
Russian.ini извлекать в temp не надо, он внутри библиотеки как родной язык. Нужные тебе строки выделены синим и красным- с остальными языками аналогично.

PS Объяснять мне лень - тупа копируй по примеру.

 
Последнее редактирование:

SteelRat

Мимокрокодил
Snoopak96, не знаю что там InnoSetup проверяет, но в независимости от установленных в системе языков он позволяет выбрать любой из списка языков, указанных в проекте. У меня в системе только русский, но можно выбрать и английский, и немецкий, и французский...

Ничего не получается у меня. Вот полный код:
Код:
#define MyAppName "My Program"
#define MyAppVerName "My Program"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.mycompany.com"
#define DefaultSize '5000000000'
#define DefaultVersion '1.0.1'
#define DefaultMemory '256'

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName} {code:GetCurrentVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=install
Compression=lzma
SolidCompression=true
CreateAppDir=true
ShowLanguageDialog=yes
ExtraDiskSpaceRequired={#DefaultSize}

; We compare the setup version information here against
; the one on the server to check for a newer version.
VersionInfoVersion={#DefaultVersion}
VersionInfoTextVersion={code:GetCurrentVersion}

[Languages]
[B][COLOR="red"]Name: English; MessagesFile: compiler:Default.isl[/COLOR][/B]
Name: french; MessagesFile: compiler:Languages\French.isl
Name: german; MessagesFile: compiler:Languages\German.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: spanish; MessagesFile: compiler:Languages\Spanish.isl

[Files]
Source: modules\unpacker\langs\*.ini; Flags: dontcopy
Source: modules\unpacker\ISDone.dll; DestDir: {tmp}; Flags: dontcopy

[Сode]
var
	CurrentVersion, NeedMemory, VersionFile, Language: string;

function GetCurrentVersion(Param: String): String;
begin
	Result := CurrentVersion;
end;

var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton: TButton;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;

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

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@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));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  LabelTime3.Hide;
  MyCancelButton.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
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left     := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left     := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    Parent   := WizardForm.FinishedPage;
    AutoSize := False;
    Width    := 300;
    Left     := 180;
    Top      := 200;
  end;
  MyCancelButton:=TButton.Create(WizardForm);
  with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=ScaleX(135);
    Caption:=ExpandConstant('{cm:CancelButton}');
    Left:=ScaleX(360);
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    LabelTime3.Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

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

procedure UnpackerInit();
begin
	[B][COLOR="red"]ExtractTemporaryFile('English.ini')[/COLOR][/B];
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue: cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp: integer;
    ExecError: boolean;
    InFilePath,OutFilePath,OutFileName: PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

	[B][COLOR="Red"]ChangeLanguage('English')[/COLOR][/B];

    Comps1:=0;
    Comps2:=0;
    Comps3:=0;

    ISDoneError:=true;

    if ISDoneInit(ExpandConstant('C:\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, StrToInt(NeedMemory), @ProgressCallback) then begin
      repeat
        if not FileSearchInit(true) then break;

		if not IS7ZipExtract (0, 100, ExpandConstant('{src}\data.7z'), 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 InitializeWizard();
var
  downloadPage: TWizardpage;
begin
	UnpackerInit();
end;

function InitializeSetup(): Boolean;
begin
	VersionFile := ExpandConstant('{src}\version.ini');

	Language := ExpandConstant('{language}');
	CurrentVersion := GetIniString('main', 'Version', '{#DefaultVersion}', VersionFile);
	NeedMemory := GetIniString('main', 'Memory', '{#DefaultMemory}', VersionFile);

	Result := true;
end;
Та же ошибка об отсутствии файла английской локализации.

Всё, нашел ошибку. Оказывается функция ChangeLanguage должна вызываться после функции ISDoneInit, о чем не написано в документации.
 
Последнее редактирование модератором:

deus_ex

Новичок
Проверенный
возникла небольшая проблемка с функцией ISxDeltaExtract

если сделать, как указано в хэлпе к версии исдон 0.6финал (тоесть перез закрытием скобки два значения истины)
Код:
if not ISxDeltaExtract(0, 0, 0, 640, ExpandConstant('{app}\0.7z'), ExpandConstant('{app}\0.d'), ExpandConstant('{app}\1.7z'), true, true) then break;
то компилятор ругается, на второе true

если сделать с одним true, как указано в примерах в самом тестовом скрипте
Код:
if not ISxDeltaExtract(0, 0, 0, 640, ExpandConstant('{app}\0.7z'), ExpandConstant('{app}\0.d'), ExpandConstant('{app}\1.7z'), true) then break;
то компилятор ни на что не ругается, собственно сама функция обрабатывается вроде бы нормально, мы получаем на выходе файл 1.7z и тут же, не удалив исходные файлы инсталлятор вылетает с вот такой ошибкой

В чём моя ошибка?
 

Edison007

Ветеран
Модератор
как указано в хэлпе к версии исдон 0.6финал
а сам скрипт и длл из финальной версии?

т.к в финалке функция выглядит так (Цитата: добавил параметр удаления входного файла в ISxDeltaExtract.):
Код:
ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, [B]DeleteDiffFile[/B]:boolean):boolean;
а в прошлых версиях так:
Код:
ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile:boolean):boolean;
 
Последнее редактирование:

respack

Мимокрокодил
Как переместить кнопку "Ошибка роспаковкы" на область ISWin7?
 

szaby59

Мимокрокодил
Hello!

I compressed some files with precomp 0.4, then with "srepinside".

I would like to use "PCFonFly method to extract them but the setup always shows me this error : "File has not been created by the console application%n%s%nProbably error or incorrect format of a pcf-file" - it's the "ERROR_ISPCF_CANT_FIND_OUTFILE" message.

But the included precomp04 with isdone can extract these files.
 

MarkusEVO

Мимокрокодил
Уважаемые ГУРУ Инно Скриптов! Очень нужна Ваша помощь плохо знающего Скрипты Инно, помогите разобраться.....
Вот часть моего скрипта:
Код:
// Распаковка всех необходимых файлов в папку {tmp}.
#ifdef facompress
    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов
#endif
#ifdef SrepInside
    ExtractTemporaryFile('arc.ini');
    ExtractTemporaryFile('srep.exe');
#endif
#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
  #if precomp == "0.38"
      ExtractTemporaryFile('precomp038.exe');
  #else
    #if precomp == "0.4"
      ExtractTemporaryFile('precomp040.exe');
    #else
      #if precomp == "0.41"
      ExtractTemporaryFile('precomp041.exe');
      #else
      ExtractTemporaryFile('precomp038.exe');
      ExtractTemporaryFile('precomp040.exe');
      ExtractTemporaryFile('precomp041.exe');
      #endif
    #endif
  #endif
#endif
#ifdef unrar
    ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
    ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
    ExtractTemporaryFile('7z.dll');
    ExtractTemporaryFile('PackZIP.exe');
#endif

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue;     //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue;     //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 4
//    .....
// см. справку
#endif

#ifdef precomp
  PCFVer:={#precomp};
#else
  PCFVer:=0;
#endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
        if not SrepInit('',512,0) then break;
        if not PrecompInit(PCFVer) then break;
        if not FileSearchInit(false) then break;

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data1.arc'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}\'), PCFonFLY) then break;

//    далее находятся закомментарованые примеры различных функций распаковки
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract   ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),   ExpandConstant('{app}\out.dat'), false) then break;
        if not ISPackZIP       ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{arr}\"'), ExpandConstant('{tmp}'), '...') then break;
        if not ShowChangeDiskWindow ('Ïîæàëóéñòà, âñòàâüòå âòîðîé äèñê è äîæäèòåñü åãî èíèöèàëèçàöèè.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распакр=овка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
 DeinitializeSlideShow;
 KillTimer(0, TimerID);
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
 DeinitializeSlideShow;
 KillTimer(0, TimerID);
    Exec2(ExpandConstant('{uninstallexe}'), '/SILENT', false);
  end;
end;
Запаковываю файл при помощи FreARC и переименновываю в data1.arc
Затем делаю компиляцию, она проходит без ошибок!
После чего пытаюсь установить, выдаёт ошибку
Не найдено ни одного файла, указанного для ISArcExtract
Помогите пожалуйста разобраться во всем этом...
может я не правильно вставляю или еще где-нибудь надо....
 
Последнее редактирование модератором:

vint56

Ветеран
Проверенный
MarkusEVO ты в скрипте нечего не менял вот здесь OutputDir=. это путь вывод проэкта
когда пишет Не найдено ни одного файла, указанного для ISArcExtract значит возле setup.exe нету файла в твоем случий это data1.arc
 

Absolute

Мимокрокодил
Немного оффтоп, но все-же спрошу. Дело в том, что у меня не работает 90% репаков объемом больше (в среднем) 2 Гб. Установка прерывается каждый раз в разных местах с ошибкой ISDone.dll. Судя по сообщениям на форумах репаки рабочие у подавляющего большинства. Сейчас у меня Win7 до этого были спаренные XP и Win7, и ошибки тоже вылетали, хоть и реже, процентов 50-60 всех репаков; а сейчас совсем беда. Винты здоровые, память тоже, все проверял. В одном форуме посоветовали поставить библиотеку с этого сайта, но я, понятное дело, даже не представляю куда ее приладить, да и поможет ли это?

Krinkels, в разных репаках ошибки разные, но заголовок окна всегда один "isdone.dll". Иногда говорит, что ошибка чтения, иногда что, мол, места на диске нет. Если пытаться ставить один и тот-же репак несколько раз подряд, то ошибки будут в разных местах. Есть конечно ничтожная вероятность, что все без проблем пройдет до конца, если размер репака не слишком большой 4-5 Гб. Антивирус при этом отключен, в трэе ничего не висит.
 
Сверху