PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Gnom_aka_Lexander
07-08-2012, 09:13
Может быть я что не так установил... »
именно. обновлен у китайцев только препроцессор с дополнительным функционалом. компилятор обновлен не был и он не совместим с версией 5.5.*. ставишь инно заново, накатываешь сверху Inno ISCmplr Setup build 120726 и ни в коем случае не добавляешь туда Inno Setup Compiler build 120112, поскольку, как уже говорилось, он совершенно несовместим с версией 5.5.*. Все должно заработать.

Batistas
07-08-2012, 10:20
»
Ничего не выходит...Удалил старую версию, отчистил реестр. Скачал с официального сайта isetup-5.5.1-unicode.exe (SHA-1: 9E1E4F37F50E58E182F929A88E391AFF9C10A8E7), установил. Далее скачал архив Inno_ISCmplr_Setup120726(7zip).zip (SHA-1: 5CE7A5318245E3DF691FE4734DF1D87158481F52), разархивировал. Скопировал содержимое папки .\Inno_ISCmplr_Setup120726(7zip)\InnoSetup_Unicode\FullVCL в папку с Inno Setup. Попробовавл скопилировать скрипт - выдает ошибку - http://s017.radikal.ru/i404/1208/c6/56ad36538d84.png Вот сама Inno - http://narod.ru/disk/59001053001.d3c36b7a0f85dd26606ceb8d86f64fdf/Inno%20Setup%205.rar.html

Gnom_aka_Lexander
07-08-2012, 10:33
Batistas, залей на обменник проект целиком со всеми файлами. у меня все великолепно компилится, на 5.4.3 расширенной. Подозреваю, что ошибка после внесения тобой каких-либо изменений в скрипт.

nik1967
07-08-2012, 12:25
Batistas, и кстати, да, ошибка возможна из-за файлов. Попробуй закомментировать секцию [Files] (все файлы) и у меня ещё закомментирована строка ";SetupIconFile=Icon.ico" - всё прекрасно компилируется и на Compil32.exe и на Compil32Ex.exe.

El Sanchez
07-08-2012, 14:04
Batistas, определимся с понятиями. Файлы ISCmplr.dll, Setup.e32, SetupLdr.e32, ISCC.exe, ISPP.dll - это файлы компилятора и препроцессора, Compil32(Ex).exe - редактор (среда разработки, IDE). Скрипт компилируется на обоих видах компилятора (ANSI и Unicode), но отработал только в ANSI, на Unicode ругань на несоответствие типов, крах при создании аттрибутов, ваша ошибка тоже всплыла. Оказалось, что юникоду не понравились метод createElement при создании нод и метод setAttribute при создании аттрибутов. Процедуру CreateDCPlusPlus в своем предыдущем посте исправил.

Batistas
07-08-2012, 15:01
nik1967, Gnom_aka_Lexander помог мне потестить - у него все работает. У меня же выдает ошибку:
"[17:57:04,339] *** Установка started
[17:57:07,052] Setup version: Inno Setup version 5.4.3.ee1 (u)
[17:57:07,053] Original Setup EXE: C:\Users\Batista\Desktop\Сборка DC++\ApexDC-s16_4.exe\ApexDC-s16_4.exe\Output\Synergetic & MaxiRu DC-P2P Pack 1.0.0.exe
[17:57:07,054] Setup command line: /SL5="$160888,2072628,140800,C:\Users\Batista\Desktop\Сборка DC++\ApexDC-s16_4.exe\ApexDC-s16_4.exe\Output\Synergetic & MaxiRu DC-P2P Pack 1.0.0.exe" /DEBUGWND=$230120
[17:57:07,055] Windows version: 6.1.7601 SP1 (NT platform: Yes)
[17:57:07,056] 64-bit Windows: Yes
[17:57:07,057] Processor architecture: x64
[17:57:07,058] User privileges: Administrative
[17:57:07,065] 64-bit install mode: No
[17:57:07,067] Created temporary directory: C:\Users\Batista\AppData\Local\Temp\is-ELRD4.tmp
[17:57:07,365] InitializeWizard raised an exception (fatal).
[17:57:07,367] Exception message:
[17:57:07,368] Message box (OK):
Runtime Error (at 0:0):

Variant is null, cannot invoke.
[17:57:09,104] User chose OK.
[17:57:09,106] Deinitializing Setup.
[17:57:09,251] *** Установка exit code: 1
El Sanchez, спасибо, я с версиями уже разобрался. Компилировал при помощи Inno Ultra. И вообще, у меня такое ощущение складывается, что дело в системе. Ведь экзэшник скомпилированный появляется в папке аутпат, но не запускается. Сегодня попробую через LiveCD все это дело проделать

Разобрался. Запустилось только с переменной "ArchitecturesInstallIn64BitMode=x64", сейчас буду тестить. :)
Собсно результат тестирования: запустился два раза, один раз с рантайм ерор и зависла, второй раз тоже с рантайм ерор, до конца дошла, но ни ник, ни звук не прописались.
Все-таки придется с лайв сиди возиться :(

Ivan_009
07-08-2012, 16:12
Как сделать свою форму запроса выхода из установки примерно как тут и чтобы работала с IsDone :dont-know

Johny777
07-08-2012, 21:14
Ivan_009,
я раньше уже выкладывал этот код (ты воспользовался бы поиском)
ну да ладно
выдрал у себя из скрипта без отсылки на тот код тк этот лучше:


[Setup]
AppName=Cancel_Demo
AppVerName=Cancel_Demo
DefaultDirName={pf}\Cancel_Demo


[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl;
Name: English; MessagesFile: compiler:Languages\English.isl;


[CustomMessages]
Russian.Close=Выход
English.Close=Exit

Russian.Exit_Install=Выйти из инсталлятора?
English.Exit_Install=Exit Installer?

Russian.Exit_Install_2=Отменить установку?
English.Exit_Install_2=Cancel Installation?


[code]
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
var
MyExit: TSetupForm;

begin
Confirm := False;

MyExit := CreateCustomForm();
with MyExit do
begin
Position := poScreenCenter;
ClientWidth := ScaleX(200);
ClientHeight := ScaleY(87);
Caption := ExpandConstant('{cm:Close}');
Color := clBtnFace;
DeleteMenu(GetSystemMenu(MyExit.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(MyExit.Handle, -26, GetClassLong(MyExit.Handle, -26) or $200); /// блокировка комбинации alt + f4

with TLabel.Create(nil) do
begin
AutoSize := False;
if WizardForm.CurPageID = wpInstalling then
begin
if ActiveLanguage = 'Russian' then SetBounds(ScaleX(37), ScaleY(16), ScaleX(140), ScaleY(30)) else SetBounds(ScaleX(47), ScaleY(16), ScaleX(140), ScaleY(30));
Caption := ExpandConstant('{cm:Exit_Install_2}');
end else
begin
if ActiveLanguage = 'Russian' then SetBounds(ScaleX(30), ScaleY(16), ScaleX(140), ScaleY(30)) else SetBounds(ScaleX(65), ScaleY(16), ScaleX(140), ScaleY(30));
Caption := ExpandConstant('{cm:Exit_Install}');
end;
Parent := MyExit;
Font.Size := 9;
end;

with TButton.Create(nil) do
begin
Parent := MyExit;
Caption := ExpandConstant(SetupMessage(msgButtonNo));
SetBounds(ScaleX(18), ScaleY(47), ScaleX(71), ScaleY(25));
Cursor := crHand;
ModalResult:= mrNo;
end;

with TButton.Create(nil) do
begin
Caption := ExpandConstant(SetupMessage(msgButtonYes));
Parent := MyExit;
SetBounds(ScaleX(110), ScaleY(47), ScaleX(71), ScaleY(25));
Cursor := crHand;
ModalResult := mrYes;
end;

case ShowModal() of

mrNo : Cancel := False;

mrYes :
begin
case
WizardForm.CurPageID of
wpInstalling : Application.Title := ExpandConstant(' ' + SetupMessage(msgButtonCancel) + '...');
end;
end;

end;

Free;
end;
end;


и чтобы работала с IsDone »
пример выше с ним не работает
IsDone не знаю

Mailchik
07-08-2012, 21:22
и чтобы работала с IsDone
procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
MyExitMessage();
if MyExit.ShowModal() = mryes then ISDoneCancel:=1;
ResumeProc;
end;
MyCancelButton.OnClick := @CancelButtonOnClick;
Для кода, который выложил товарищ Johny777 выше.

Serega
07-08-2012, 21:58
элементарно добавить условие и все. »
Зачем перебирать все имена в папке, когда можно просто указать маску?
Так будет быстрей работать:


function GetFileCount(dir, mask: string): Integer;
var
FindFiles: TFindRec;
begin
Result := 0;
if dir[Length(dir)] <> '\' then
Insert('\', dir, Length(dir)+1);
if FindFirst(dir + mask, FindFiles) then
begin
repeat
if FindFiles.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
case FindFiles.Name of
{#FNames}: Result := Result + 1;
end;
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;

procedure InitializeWizard();
begin
WizardForm.WelcomeLabel1.Caption := IntToStr(GetFileCount(ExpandConstant('{pf}\Inno Setup 5'), '*_update.exe'));
end;


тоесть функция полностью на асме, без паскалевских логических скобок. »
Ассеблер не поддерживается в Инно.

Ivan_009
08-08-2012, 08:05
Покажите пожалуйста пример как пользоваться Inno Setup Unpacker 0.37 как распаковать инсталлятор... :sorry:

alert30
08-08-2012, 09:15
Ivan_009, UnPacker распаковывает только инсталляторы, которые компилировались на стандартном компиляторе; а вот если использовать UnPacker, т.е. распаковать инсталляторы, которые компилровались на расширенном китайском компиляторе, выдает ошибку.

Johny777
08-08-2012, 12:28
Serega,
спасибо за функцию. Она быстрее прощупывает папки с большим количеством файлов
только вот вылетала
ошибка

---------------------------
Ошибка запуска
---------------------------
Строка 1179:

Out Of String Range.
---------------------------
ОК
---------------------------

на строке:

if dir[Length(dir)] <> '\' then
Insert('\', dir, Length(dir)+1);

а именно при нажатии на кнопку отмена на маленькой форме
форма появляется при таком вот условии
if (GetFileCount(S_UPD, '*_update.exe') > 1) and (GetFileCount(ExpandConstant('{src}\outer\update'), '*_update.exe') > 0) and (S_UPD <> ExpandConstant('{src}\outer\update')) then
те если в пути указываемом в TFolderTreeView файлов больше одного, а в директории по умолчанию - папка Outer рядом с инсталлом - есть хоть один файл
после появления формы при нажатии на кнопку отмена директория TFolderTreeView сбрасывается:
TFolderTreeView(Sender).Directory := ExpandConstant('{src}\outer\update');
вот тут-то и вылетала ошибка
исправил (выделил зелёным):

function GetFileCount(dir, mask: string): Integer;
var
FindFiles: TFindRec;
begin
Result := 0;
if FindFirst(dir +'\' + mask, FindFiles) then
begin
repeat
if FindFiles.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
case FindFiles.Name of
{#FNames}: Result := Result + 1;
end;
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;

надеюсь этим как обычно не накосячил (может стоило воспользоваться встроенной AddBackslash ?), хотя вроде по тестам всё в порядке :)

============================================================================ другой вопрос/просьба
вот процедура рассчёта свободного места


/// свободное место /// начало
var
Size_Form_Exist: boolean;
Size_Form: TSetupForm;
NeedSizeLabel, FreeSizeLabel: TLabel;
No_Space: boolean;
One_Game_Selected: boolean;

half_life_2_russian_gcf: boolean; // 1
half_life_2_buka_russian_gcf: boolean; // 2
half_life_2_2007_base_content_gcf: boolean; // 3
half_life_2_content_gcf: boolean; // 4
// half_life_2_game_dialog_gcf: boolean; // 5
episode_one_2007_content_gcf: boolean; // 6
half_life_2_episode_one_gcf: boolean; // 7
episodic_2007_shared_gcf: boolean; // 8
episode_1_shared_gcf: boolean; // 9
half_life_2_episode_two_english_gcf: boolean; // 10
episode_two_content_gcf: boolean; // 11
episode_two_maps_gcf: boolean; // 12
episode_two_materials_gcf: boolean; // 13
portal_english_gcf: boolean; // 14
portal_content_gcf: boolean; // 15
source_2007_binaries_2_gcf: boolean; // 16
source_2007_shared_materials_gcf: boolean; // 17
source_2007_shared_models_gcf: boolean; // 18
source_2007_shared_sounds_gcf: boolean; // 19
source_materials_gcf: boolean; // 20
source_models_gcf: boolean; // 21
source_sounds_gcf: boolean; // 22
half_life_2_episode_one_russian_gcf: boolean; // 23
half_life_2_episode_two_russian_gcf: boolean; // 24
portal_russian_gcf: boolean; // 25

procedure Calculate;
var
NeedSize: Integer;
iCore_All, iCoreEpisodes: Integer;
ihl2_Size, ihl2_russian_Size, ihl2_russian_buka_Size: Integer;
ihl2_ep1_Size, ihl2_ep1_russian_Size: Integer;
ihl2_ep2_Size, ihl2_ep2_russian_Size, ihl2_ep2_english_Size: Integer;
iPortal_Size, iPortal_russian_Size, iPortal_english_Size: Integer;
ihl2_Dir_Size, iep1_Dir_Size, iep2_Dir_Size, iportal_Dir_Size: Integer;

One_Episode_Selected: boolean;

i_half_life_2_russian_gcf: Integer; // 1
i_half_life_2_buka_russian_gcf: Integer; // 2
i_half_life_2_2007_base_content_gcf: Integer; // 3
i_half_life_2_content_gcf: Integer; // 4
// i_half_life_2_game_dialog_gcf: Integer; // 5
i_episode_one_2007_content_gcf: Integer; // 6
i_half_life_2_episode_one_gcf: Integer; // 7
i_episodic_2007_shared_gcf: Integer; // 8
i_episode_1_shared_gcf: Integer; // 9
i_half_life_2_episode_two_english_gcf: Integer; // 10
i_episode_two_content_gcf: Integer; // 11
i_episode_two_maps_gcf: Integer; // 12
i_episode_two_materials_gcf: Integer; // 13
i_portal_english_gcf: Integer; // 14
i_portal_content_gcf: Integer; // 15
i_source_2007_binaries_2_gcf: Integer; // 16
i_source_2007_shared_materials_gcf: Integer; // 17
i_source_2007_shared_models_gcf: Integer; // 18
i_source_2007_shared_sounds_gcf: Integer; // 19
i_source_materials_gcf: Integer; // 20
i_source_models_gcf: Integer; // 21
i_source_sounds_gcf: Integer; // 22
i_half_life_2_episode_one_russian_gcf: Integer; // 23
i_half_life_2_episode_two_russian_gcf: Integer; // 24
i_portal_russian_gcf: Integer; // 25

begin
if not Size_Form_Exist then
begin
if not Param and not Game_From_INI_Selected then
begin
half_life_2_russian_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2_russian.gcf');
half_life_2_buka_russian_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 buka russian.gcf');
half_life_2_2007_base_content_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 2007 base content.gcf');
half_life_2_content_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 content.gcf');
// half_life_2_game_dialog_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 game dialog.gcf');
episode_one_2007_content_gcf := FileExists(WizardForm.DirEdit.Text + '\episode one 2007 content.gcf');
half_life_2_episode_one_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 episode one.gcf');
episodic_2007_shared_gcf := FileExists(WizardForm.DirEdit.Text + '\episodic 2007 shared.gcf');
episode_1_shared_gcf := FileExists(WizardForm.DirEdit.Text + '\episode 1 shared.gcf');
half_life_2_episode_two_english_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 episode two english.gcf');
episode_two_content_gcf := FileExists(WizardForm.DirEdit.Text + '\episode two content.gcf');
episode_two_maps_gcf := FileExists(WizardForm.DirEdit.Text + '\episode two maps.gcf');
episode_two_materials_gcf := FileExists(WizardForm.DirEdit.Text + '\episode two materials.gcf');
portal_english_gcf := FileExists(WizardForm.DirEdit.Text + '\portal english.gcf');
portal_content_gcf := FileExists(WizardForm.DirEdit.Text + '\portal content.gcf');
source_2007_binaries_2_gcf := FileExists(WizardForm.DirEdit.Text + '\source 2007 binaries 2.gcf');
source_2007_shared_materials_gcf := FileExists(WizardForm.DirEdit.Text + '\source 2007 shared materials.gcf');
source_2007_shared_models_gcf := FileExists(WizardForm.DirEdit.Text + '\source 2007 shared models.gcf');
source_2007_shared_sounds_gcf := FileExists(WizardForm.DirEdit.Text + '\source 2007 shared sounds.gcf');
source_materials_gcf := FileExists(WizardForm.DirEdit.Text + '\source materials.gcf');
source_models_gcf := FileExists(WizardForm.DirEdit.Text + '\source models.gcf');
source_sounds_gcf := FileExists(WizardForm.DirEdit.Text + '\source sounds.gcf');
half_life_2_episode_one_russian_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 episode one russian.gcf');
half_life_2_episode_two_russian_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2 episode two russian.gcf');
portal_russian_gcf := FileExists(WizardForm.DirEdit.Text + '\portal russian.gcf');
end;

Size_Form := CreateCustomForm();
with Size_Form do
begin
ClientWidth := ScaleX(187);
ClientHeight := ScaleY(54);
BorderIcons := [];
Caption := ExpandConstant('{cm:SFormCaption}');
Left := WizardForm.Left + ScaleX(346);
Top := WizardForm.Top - ScaleY(87);
DeleteMenu(GetSystemMenu(Size_Form.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(Size_Form.Handle, -26, GetClassLong(Size_Form.Handle, -26) or $200); /// блокировка комбинации alt + f4
if not No_Backgr_Pic then FormStyle := fsStayOnTop;

NeedSizeLabel := TLabel.Create(nil)
with NeedSizeLabel do
begin
Parent := Size_Form;
SetBounds(ScaleX(7), ScaleY(1), ScaleX(50), ScaleY(13));
Caption := ExpandConstant('{cm:Count}');
end;

FreeSizeLabel := TLabel.Create(nil)
with FreeSizeLabel do
begin
Parent := Size_Form;
SetBounds(ScaleX(7), ScaleY(23), ScaleX(50), ScaleY(13));
Caption := ExpandConstant('{cm:Analyze}');
end;

GetSpaceOnDisk(ExtractFileDrive(WizardForm.DirEdit.Text), True, FreeMB, TotalMB);
FreeSizeLabel.Caption := ExpandConstant('{cm:Free_Space} ') + FloatToStr(round(FreeMB/1024*100)/100) + ExpandConstant(' {cm:Gb}');

Show;
Repaint;
Size_Form_Exist := True;
end;
SendMessage(WizardForm.Handle,$0112,$F012,0); // нажимаем на окно, чтоб стало активным
end;
////////////////////////////////////////////

One_Episode_Selected := (hl2_ru_RadioButton.Checked and hl2_ru_RadioButton.Enabled) or (hl2_ep1_ru_RadioButton.Checked and hl2_ep1_ru_RadioButton.Enabled) or (hl2_ep2_ru_RadioButton.Checked and hl2_ep2_ru_RadioButton.Enabled);



// half_life_2_game_dialog_gcf
if hl2_CheckBox.Checked and hl2_CheckBox.Enabled then /// эксклюзивные файлы халфы 2
begin
if not DirExists(WizardForm.DirEdit.Text + '\common\half-life 2') then ihl2_Dir_Size := 1903 else ihl2_Dir_Size := 0;
if not half_life_2_buka_russian_gcf then i_half_life_2_buka_russian_gcf := 428 else i_half_life_2_buka_russian_gcf := 0;
if not half_life_2_2007_base_content_gcf then i_half_life_2_2007_base_content_gcf := 498 else i_half_life_2_2007_base_content_gcf := 0;
if not half_life_2_content_gcf then i_half_life_2_content_gcf := 841 else i_half_life_2_content_gcf := 0; /// точно

if (hl2_buka_CheckBox.Checked and hl2_buka_CheckBox.Enabled) then ihl2_russian_buka_Size := i_half_life_2_buka_russian_gcf else ihl2_russian_buka_Size := 0; /// бука

ihl2_Size := i_half_life_2_2007_base_content_gcf + i_half_life_2_content_gcf + ihl2_Dir_Size // где 1844 это размер папки с файлами
end;



if hl2_ep1_CheckBox.Checked and hl2_ep1_CheckBox.Enabled then /// эксклюзивные файлы эпизода 1
begin
if not DirExists(WizardForm.DirEdit.Text + '\common\half-life 2 episode one') then iep1_Dir_Size := 142 else iep1_Dir_Size := 0;
if not episode_one_2007_content_gcf then i_episode_one_2007_content_gcf := 246 else i_episode_one_2007_content_gcf := 0; /// точно
if not half_life_2_episode_one_gcf then i_half_life_2_episode_one_gcf := 606 else i_half_life_2_episode_one_gcf := 0; /// точно

ihl2_ep1_Size := i_episode_one_2007_content_gcf + i_half_life_2_episode_one_gcf + iep1_Dir_Size
end;



if hl2_ep2_CheckBox.Checked and hl2_ep2_CheckBox.Enabled then /// зксклюзивные файлы эпизода 2
begin
if not DirExists(WizardForm.DirEdit.Text + '\common\half-life 2 episode two') then iep2_Dir_Size := 332 else iep2_Dir_Size := 0;
if not half_life_2_episode_two_russian_gcf then i_half_life_2_episode_two_russian_gcf := 303 else i_half_life_2_episode_two_russian_gcf := 0;
if not half_life_2_episode_two_english_gcf then i_half_life_2_episode_two_english_gcf := 500 else i_half_life_2_episode_two_english_gcf := 0;
if not episode_two_content_gcf then i_episode_two_content_gcf := 1442 else i_episode_two_content_gcf := 0;
if not episode_two_maps_gcf then i_episode_two_maps_gcf := 675 else i_episode_two_maps_gcf := 0;
if not episode_two_materials_gcf then i_episode_two_materials_gcf := 670 else i_episode_two_materials_gcf := 0;

if (hl2_ep2_ru_RadioButton.Checked and hl2_ep2_ru_RadioButton.Enabled) then ihl2_ep2_russian_Size := i_half_life_2_episode_two_russian_gcf else ihl2_ep2_russian_Size := 0; /// русская озвучка относится только ко второму эпизоду
if (hl2_ep2_en_RadioButton.Checked and hl2_ep2_en_RadioButton.Enabled) or (hl2_ep2_ru_en_RadioButton.Checked and hl2_ep2_ru_en_RadioButton.Enabled) then ihl2_ep2_english_Size := i_half_life_2_episode_two_english_gcf else ihl2_ep2_english_Size := 0

ihl2_ep2_Size := i_episode_two_content_gcf + i_episode_two_maps_gcf + i_episode_two_materials_gcf + iep2_Dir_Size
end;



if portal_CheckBox.Checked and portal_CheckBox.Enabled then // экссклюзив файлы Портала
begin
if not DirExists(WizardForm.DirEdit.Text + '\common\portal') then iportal_Dir_Size := 121 else iportal_Dir_Size := 0;
if not portal_russian_gcf then i_portal_russian_gcf := 111 else i_portal_russian_gcf := 0; /// точно
if not portal_english_gcf then i_portal_english_gcf := 160 else i_portal_english_gcf := 0; /// точно
if not portal_content_gcf then i_portal_content_gcf := 1049 else i_portal_content_gcf := 0; /// точно

if (portal_ru_RadioButton.Checked and portal_ru_RadioButton.Enabled) then iPortal_russian_Size := i_portal_russian_gcf else iPortal_russian_Size := 0;
if (portal_en_RadioButton.Checked and portal_en_RadioButton.Enabled) or (portal_ru_en_RadioButton.Checked and portal_ru_en_RadioButton.Enabled) then iPortal_english_Size := i_portal_english_gcf else iPortal_english_Size := 0;

iPortal_Size := i_portal_content_gcf + iportal_Dir_Size
end;


/// ядро ресурсов всех 4-х игр
if One_Game_Selected then
begin
if not source_2007_binaries_2_gcf then i_source_2007_binaries_2_gcf := 135 else i_source_2007_binaries_2_gcf := 0; /// точно
if not source_2007_shared_materials_gcf then i_source_2007_shared_materials_gcf := 985 else i_source_2007_shared_materials_gcf := 0; /// точно
if not source_2007_shared_models_gcf then i_source_2007_shared_models_gcf := 148 else i_source_2007_shared_models_gcf := 0; /// точно
if not source_2007_shared_sounds_gcf then i_source_2007_shared_sounds_gcf := 2 else i_source_2007_shared_sounds_gcf := 0; /// точно
if not source_materials_gcf then i_source_materials_gcf := 1047 else i_source_materials_gcf := 0; /// точно
if not source_models_gcf then i_source_models_gcf := 449 else i_source_models_gcf := 0; /// точно
if not source_sounds_gcf then i_source_sounds_gcf := 975 else i_source_sounds_gcf := 0; /// точно

iCore_All := i_source_2007_binaries_2_gcf + i_source_2007_shared_materials_gcf + i_source_2007_shared_models_gcf + i_source_2007_shared_sounds_gcf + i_source_materials_gcf + i_source_models_gcf + i_source_sounds_gcf;
end;



if ((hl2_ep1_CheckBox.Checked and hl2_ep1_CheckBox.Enabled) or (hl2_ep2_CheckBox.Checked and hl2_ep2_CheckBox.Enabled)) then /// ядро ресурсов эпизодов и только их
begin
if not episodic_2007_shared_gcf then i_episodic_2007_shared_gcf := 273 else i_episodic_2007_shared_gcf := 0;
if not episode_1_shared_gcf then i_episode_1_shared_gcf := 1229 else i_episode_1_shared_gcf := 0;

iCoreEpisodes := i_episode_1_shared_gcf + i_episodic_2007_shared_gcf
end;



if One_Episode_Selected then /// файл hl2_russian.gcf относится ко всем 3-м играм
begin
if not half_life_2_russian_gcf then i_half_life_2_russian_gcf := 784 else i_half_life_2_russian_gcf := 0;

ihl2_russian_Size := i_half_life_2_russian_gcf;
end;



if (hl2_ep1_ru_RadioButton.Checked and hl2_ep1_ru_RadioButton.Enabled) or (hl2_ep2_ru_RadioButton.Checked and hl2_ep2_ru_RadioButton.Enabled) then /// half-life 2 episode one russian.gcf относится к 2-м эпизодам
begin
if not half_life_2_episode_one_russian_gcf then i_half_life_2_episode_one_russian_gcf := 539 else i_half_life_2_episode_one_russian_gcf := 0; /// точно

ihl2_ep1_russian_Size := i_half_life_2_episode_one_russian_gcf
end;



NeedSize := iCore_All + iCoreEpisodes + ihl2_Size + ihl2_russian_Size + ihl2_russian_buka_Size + ihl2_ep1_Size + ihl2_ep1_russian_Size + ihl2_ep2_Size + ihl2_ep2_russian_Size + ihl2_ep2_english_Size + iPortal_russian_Size + iPortal_english_Size + iPortal_Size;


if FreeMB < NeedSize then
begin
if WizardForm.CurPageID = wpSelectDir then WizardForm.NextButton.Enabled := False;

NeedSizeLabel.Font.Color := $48c1ca;

No_Space := True;
end
else
begin
if WizardForm.CurPageID = wpSelectDir then WizardForm.NextButton.Enabled := not IsStringCyrillic(WizardForm.DirEdit.Text);

NeedSizeLabel.Font.Color := clWindowText;

No_Space := False;
end;

NeedSizeLabel.Caption := ExpandConstant('{cm:Needed_Size} ') + FloatToStr(round(NeedSize/1024*100)/100) + ExpandConstant(' {cm:Gb}'); // + IntToStr(NeedSize) + ' Mb';
end;
/// конец


где Param(чекбокс отмечен через параметр запуска) и Game_From_INI_Selected(чекбокс отмечен из ключа рядом лежащего ини) это булев переменные
если одна из них True, то длинный рассчёт
...
half_life_2_russian_gcf := FileExists(WizardForm.DirEdit.Text + '\half-life 2_russian.gcf');
...
обрабатывается в InitializeWizard и в WizardFormDirEditOnChange
укоротил и упростил эту процедуру как мог

если есть ещё способы по ускорению скорости её работы, то скажите пожалуйста

Leka_651
08-08-2012, 13:58
Johny777,
твой скрипт работает замечательно. детает то что мне нужно :)
но при попытке соединить его с моим вылетает ошибка:

Compiling section
Error on line 2084 in d:\setup\sbis-setup\setup-eo.iss: Column 4:
Duplicate identifier 'TSHFileOpStruct'
Compile aborted.

на строке
[code]
type // это сторока 2084
TSHFileOpStruct=record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND;
lpszProgressTitle: PChar;
end;


вот где дублируется, не понимаю. поиск по файлам не находит повторений(

вот все мои скрипты и файлы для сборки
http://wtrns.fr/fs097Jn71d0RQUwgkj

Johny777
08-08-2012, 15:53
Leka_651,
скачай отсюда http://forum.oszone.net/showthread.php?p=1201499#post1201499
или отсюда (проще установка) http://innoultra.ru/?page_id=18
расширенную версию Inno
установи расширенный компилятор ANSI
попробуй скомпилировать

ели будет ошибка закомментируй так (возможно инно уже знает этот тип, те он уже встроен заводом):

{type // это сторока 2084
TSHFileOpStruct=record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND;
lpszProgressTitle: PChar;
end;}

ещё раз попробуй

где дублируется, не понимаю »
может в модуле, если ты ими пользуешься

твой скрипт работает замечательно. детает то что мне нужно »
наконец-то я хоть что-то путное собрал. Радует
_______________________--
по ссылке на твой архив пишет, что файл устарел и больше не доступен

Leka_651
08-08-2012, 16:03
Johny777,
спасибо. пойду попробую :)

Johny777,
ошибка осталась :(
до этого у меня стояла версия 5.5.0 и твой скрипт работал. ошибка похоже у меня

может в модуле, если ты ими пользуешься »

я не знаю что такое модули в inno setup :(


вот новая ссылка. теперь должно качаться
http://download.sbis.ru/files/setup.zip

Leka_651
08-08-2012, 16:22
упс... как-то у меня два сообщения в одно слились :dont-know

Johny777
08-08-2012, 17:20
Leka_651, ну и тяжёлый же у тебя скрипт. Запутался
я не знаю что такое модули »
например этот
#include "SHFileOperation.iss"
которого рядом нет
но если ты его подключаешь, то и будет вылетать с ошибкой, тк эта же функция используется и для этой версии копирования (бэкапа)
function SHFileOperation(const lpFileOp: TSHFileOpStruct):integer; external 'SHFileOperation@shell32.dll stdcall';

попробую другую функцию копирования использовать.

Leka_651
08-08-2012, 17:34
Johny777,
это не все скрипты. я лишнее убрала

я могу обойтись без этого модуля
#include "SHFileOperation.iss"

я его закомментировала и сборка пошла)) пока не заморачивайся с другой функцией. сейчас посмотрю как будет работать)

Leka_651
08-08-2012, 17:49
Johny777,
не хочет работать.

буду сейчас разбираться где косяк.




© OSzone.net 2001-2012