Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для A1EXXX

Старожил


Сообщения: 178
Благодарности: 67

Профиль | Отправить PM | Цитировать


Помогите разобраться: есть простенький скрипт с запросом второго диска для распаковки FreeArc:
читать дальше »

Цитата:
#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: C:\Program Files\FreeArc\bin\Arc.exe; DestDir: {tmp}; Flags: dontcopy

[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.

[code]
var
SecondProgressBar: TNewProgressBar;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.StatusLabel.Width:=ScaleX(262);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);

SecondProgressBar := TNewProgressBar.Create(WizardForm);
with SecondProgressBar do
begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Min := 0;
Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1
end;
end;

procedure PlsInsertNextDisk(num: integer; CheckedFile: string);
var Capt:string;
begin
CheckedFile:=ExpandConstant(CheckedFile);
if not FileExists(CheckedFile) then begin
Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
end;

procedure ExtractArc(arcArchName,arcDestDir:string);
var ResCode:integer;
begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
Exec(ExpandConstant('{tmp}\arc.exe'), 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', SW_HIDE, ewWaitUntilTerminated, ResCode);
if (ResCode <> 0) then begin
MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
SecondProgressBar.Hide;
DelTree(ExpandConstant('{app}'), True, True, True);
Abort;
end else
SecondProgressBar.Position:= SecondProgressBar.Position+3
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
ExtractTemporaryFile('arc.exe');
SecondProgressBar.Position:=SecondProgressBar.Position+1;

ExtractArc('{src}\data-1.arc','{app}\');
ExtractArc('{src}\data-2.arc','{app}\');

PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск
ExtractArc('{src}\data-3.arc','{app}\');
ExtractArc('{src}\data-4.arc','{app}\');
PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск
end;
end;

Если пытаюсь установить в папку по умолчанию (именно этого скрипта) - не распаковывается, ошибка! Если, например, меняю путь на D:\Games\Test - распаковывается!
Теперь самое ужасное: использую этот скрипт для игры - ни в какую папку, ни на какой диск распаковка не идёт!!! Пробовал на одних и тех же архивах! Help!
Serega, как-то пробовал ваш скрипт FreeArc - вообще не распаковывалось... что я не так делаю?
З.Ы. Окно во время распаковки не кликабельное, т.е. свернуть, переместить нельзя, - это можно как-то исправить???

Последний раз редактировалось A1EXXX, 23-11-2009 в 19:19.


Отправлено: 18:35, 23-11-2009 | #471