Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
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 расширенной. Подозреваю, что ошибка после внесения тобой каких-либо изменений в скрипт.
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 выше.
элементарно добавить условие и все. »
Зачем перебирать все имена в папке, когда можно просто указать маску?
Так будет быстрей работать:
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:
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.