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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 5]

Аватара для El Sanchez

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для audiofeel

Пользователь


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

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


по отдельности если компилировать оба скрипта что я "выложил" выше = ошибки нет - проблема в объединение этих скриптов в один . с "#include" тоже не выходит

Отправлено: 16:26, 12-01-2013 | #1541



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Mailchik

Пользователь


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

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


audiofeel, рабочий вариант:
читать дальше »
Код: Выделить весь код
#define MyAppName "Assassin's Creed III"
 #define MyAppVerName "Assassin's Creed III [v 1.01]"

 #define NeedSize 10752

 #define Components

 ;#define records
 ;#define facompress
 ;#define PrecompInside
 #define SrepInside

 [Setup]
 AppName={#MyAppName}
 AppVerName={#MyAppName}
 AppPublisher=Fakt_37
 DefaultDirName={pf}\Fakt_37\{#MyAppName}
 DefaultGroupName=Fakt_37\{#MyAppName}
 DirExistsWarning=no
 AppID={{0872DB47-24CB-4C7F-AC4B-E6EFC27BD244}
 VersionInfoDescription={#MyAppName}
 DisableReadyPage=yes
 LZMAAlgorithm=1
 LZMAMatchFinder=BT
 LZMANumFastBytes=273

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

 [CustomMessages]
 rus.Welcome=Вас приветствует Мастер установки игры «{#MyAppName}» %nРекомендуется закрыть антивирусные программы, а также все прочие приложения перед тем, как продолжить.%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.
 rus.Dir1=Программа установит «{#MyAppName}» в следующую папку.
 rus.Group1=Программа создаст ярлыки в следующей папке меню «Пуск».
 rus.FreeSpace=Доступно места на диске:
 rus.NeedSpace=Требуется места для установки:
 rus.nic=Не создавать папку в меню «Пуск»
 rus.Fin=%nУстановка игры «{#MyAppName}» успешно завершена. %nНажмите "Завершить", чтобы выйти из программы установки.
 rus.FinError=Установка игры «{#MyAppName}» не завершена. %nВо время установки произошла ошибка, пожалуйста отключите сторонние программы и повторите попытку установки. %nНажмите "Завершить", чтобы выйти из программы установки.
 rus.Extracted=Распаковка файлов...
 rus.rbc=Откат установки...
 rus.Dir2=Нажмите «Далее», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор»

 #ifdef Components

 [Registry]

 [Types]
 Name: full; Description: Full installation; Flags: iscustom

 [Components]
 Name: Dector; Description: Дополнительные ярлыки:; Types: full
 Name: Dector\a; Description: Добавить ярлык на рабочий стол; Types: full
 Name: PO; Description: Дополнительное програмное обеспечения:; Types: full
 Name: PO\a; Description: Обновить DirectX; Types: full
 Name: PO\b; Description: Установить/обновить Microsoft Visual C++; Types: full
 Name: PO\c; Description: Установить/обновить Microsoft Visual C++; Types: full
 #endif

 [Files]
 Source: Files\fon.png; Flags: dontcopy
 Source: Files\pb1.png; Flags: dontcopy
 Source: Files\pb2.png; Flags: dontcopy
 Source: Files\1.bmp; Flags: dontcopy
 Source: Files\form.png; Flags: dontcopy
 Source: Files\form1.png; Flags: dontcopy
 Source: Files\logo.png; Flags: dontcopy
 Source: Files\button.png; Flags: dontcopy
 Source: dll\*.*; Flags: dontcopy
 Source: ISDone\unarc.dll; DestDir: {tmp}; Flags: dontcopy
 Source: ISDone\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
 #ifdef records
 Source: records.inf; DestDir: {tmp}; Flags: dontcopy
 #endif

 #ifdef PrecompInside
 Source: ISDone\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
 Source: ISDone\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
 Source: ISDone\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
 Source: ISDone\precomp.exe; DestDir: {tmp}; Flags: dontcopy
 Source: ISDone\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
 #endif
 #ifdef SrepInside
 Source: ISDone\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
 #endif
 #ifdef facompress
 Source: ISDone\facompress.dll; DestDir: {tmp}; Flags: dontcopy
 #endif

 [Icons]
 Name: {userdesktop}\{#MyAppName}; Filename: {app}\AC3SP.exe; WorkingDir: {app}; IconFilename: {app}\AC3SP.exe; Components: Dector\a; Check: CheckError
 Name: {group}\{#MyAppName}; Filename: {app}\AC3SP.exe; WorkingDir: {app}; IconFilename: {app}\AC3SP.exe; Comment: Запустить игру; Check: CheckError
 Name: {group}\Удалить игру; Filename: {uninstallexe}; Comment: Удалить игру; Check: CheckError

 [Run]
 Filename: {src}\Redist\directx.exe; WorkingDir: {src}\Redist\; Parameters: /Q; Flags: waituntilterminated runminimized; Components: PO\a; Check: CheckError
 Filename: {src}\Redist\vcredist_x86.exe; WorkingDir: {src}\Redist\; Parameters: /Q; Flags: waituntilterminated; Components: PO\b; Check: CheckError
 Filename: {src}\Redist\PhysX.msi; Parameters: /Q; WorkingDir: {src}\Redist; Components: PO\c; Check: CheckError
 [code]
 const
 PCFonFLY=true;
 notPCFonFLY=false;

 var
 Enabled: Boolean;
 hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn: HWND;
 Welcomelbl1, Selectlbl1, Selectlbl2, MainLabel, Mb1, Mb2, NoIconsLabel, islbl1, islbl2, islbl3: TLabel;
 WFButtonFont: TFont;
 form, form1: Longint;
 NoIconsCheck: TNewCheckBox;
 IntList, VoiceList: TNewCheckListBox;
 ISDoneCancel: Integer;
 ISDoneError: Boolean;
 PCFVer: Double;
 s: AnsiString;

 function ReleaseCapture: Longint; external 'ReleaseCapture@user32.dll stdcall';

 procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 begin
 ReleaseCapture;
 SendMessage(WizardForm.Handle, $0112, $F012, 0)
 end;

 #include "AddIss\botva2.iss"
 #include "AddIss\progressbar.iss"

 var
 ISDonePB: TImgPB;
 ResultStr: string;
 ResultCode: Integer;

 function InitializeSetup:boolean;
 begin
 RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0872DB47-24CB-4C7F-AC4B-E6EFC27BD244}_is1', 'UninstallString', ResultStr)
 if ResultStr='' then
 begin
 Result := True;
 if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
 if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
 end
 else begin
 ResultStr := RemoveQuotes(ResultStr);
 Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode);
 end;
 end;

 function cm(s: PAnsiChar): String;
 begin
 Result:= ExpandConstant('{cm:'+s+'}');
 end;

 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 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 IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
 function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
 function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
 function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
 function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
 function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@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 SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
 function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@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 ImgPBSetPosition(ISDonePB, OveralPct);
 WizardForm.Caption:= s + ' - ' + IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
 islbl1.Caption:= cm('Extracted') + ' ' + IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
 islbl2.Caption:= MinimizePathName(ExpandConstant('{app}\')+CurrentFile, islbl2.Font, ScaleX(400));
 Result := ISDoneCancel;
 end;

 procedure CancelButtonOnClick(hBtn: HWND);
 begin
 SuspendProc;
 if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then begin
 ISDoneCancel:=1;
 islbl1.Caption:= cm('rbc');
 end;
 ResumeProc;
 end;


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

 procedure CreateWizardImg;
 begin
 with WizardForm do begin
 ClientWidth:=ScaleX(623);
 ClientHeight:=ScaleY(382);
 InnerNotebook.Hide;
 OuterNotebook.Hide;
 Bevel.Hide;
 Center;
 Color:= $191919;
 end;

 ImgLoad(WizardForm.Handle, 'fon.png', ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, True, True);
 form:= ImgLoad(WizardForm.Handle, 'form.png', ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, True, True);
 form1:= ImgLoad(WizardForm.Handle, 'form1.png', ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, True, True);
 ImgLoad(WizardForm.Handle, 'logo.png', ScaleX(20), ScaleY(326), ScaleX(190), ScaleY(39), True, True);

 ImgSetVisibility(form1, false);

 ImgApplyChanges(WizardForm.Handle);
 end;

 procedure SetStateNewButtons;
 begin
 with WizardForm.BackButton do begin
 BtnSetText(hBackBtn,PAnsiChar(Caption));
 BtnSetVisibility(hBackBtn,Visible);
 BtnSetEnabled(hBackBtn,Enabled);
 end;
 with WizardForm.NextButton do begin
 BtnSetText(hNextBtn,PAnsiChar(Caption));
 BtnSetVisibility(hNextBtn,Visible);
 BtnSetEnabled(hNextBtn,Enabled);
 end;
 with WizardForm.CancelButton do begin
 BtnSetText(hCancelBtn,PAnsiChar(Caption));
 BtnSetVisibility(hCancelBtn,Visible);
 BtnSetEnabled(hCancelBtn,Enabled);
 end;
 BtnSetText(hDirBrowseBtn,PAnsiChar(WizardForm.DirBrowseButton.Caption));
 BtnSetText(hGroupBrowseBtn,PAnsiChar(WizardForm.GroupBrowseButton.Caption));
 end;

 procedure WizardFormBtnClick(hBtn:HWND);
 var
 Btn: TButton;
 begin
 case hBtn of
 hCancelBtn: Btn:=WizardForm.CancelButton;
 hNextBtn: Btn:=WizardForm.NextButton;
 hBackBtn: Btn:=WizardForm.BackButton;
 hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
 hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
 end;
 Btn.OnClick(Btn);
 SetStateNewButtons;
 BtnRefresh(hBtn);
 end;

 procedure NoIconsCheckClick(Sender: TObject);
 begin
 if NoIconsCheck.Checked then begin
 WizardForm.GroupEdit.Enabled:= false;
 WizardForm.GroupBrowseButton.Enabled:= false;
 BtnSetEnabled(hGroupBrowseBtn, false);
 end else begin
 WizardForm.GroupEdit.Enabled:= true;
 WizardForm.GroupBrowseButton.Enabled:= true;
 BtnSetEnabled(hGroupBrowseBtn, true);
 end;
 WizardForm.NoIconsCheck.Checked:= NoIconsCheck.Checked;
 WizardForm.GroupEdit.Color:= clblack;
 end;

 procedure NoIconsLabelClick(Sender: TObject);
 begin
 NoIconsCheck.Checked:= not NoIconsCheck.Checked;
 NoIconsCheckClick(nil);

 end;

 procedure ButtonsTextures;
 begin
 WFButtonFont:=TFont.Create;
 WFButtonFont.Style:=[fsBold];
 WFButtonFont.Name:= 'Arial';
 WFButtonFont.Size:= 8;

 with WizardForm.BackButton do begin
 hBackBtn:= BtnCreate(WizardForm.Handle, ScaleX(Left+28), ScaleY(Top+3), ScaleX(100), ScaleY(35), 'button.png', 1, False);
 BtnSetEvent(hBackBtn, BtnClickEventID, CallbackAddr('WizardFormBtnClick'));
 BtnSetFont(hBackBtn, WFButtonFont.Handle);
 BtnSetFontColor(hBackBtn, clblack, clblack, clblack, clblack);
 Width:=0;
 Height:=0;
 end;

 with WizardForm.NextButton do begin
 hNextBtn:=BtnCreate(WizardForm.Handle, ScaleX(Left+55), ScaleY(Top+3), ScaleX(100), ScaleY(35), 'button.png', 1, False);
 BtnSetEvent(hNextBtn,BtnClickEventID, CallbackAddr('WizardFormBtnClick'));
 BtnSetFont(hNextBtn,WFButtonFont.Handle);
 BtnSetFontColor(hNextBtn, clblack, clblack, clblack, clblack);
 Width:=0;
 Height:=0;
 end;

 with WizardForm.CancelButton do begin
 hCancelBtn:=BtnCreate(WizardForm.Handle, ScaleX(Left+85), ScaleY(Top+3), ScaleX(100), ScaleY(35), 'button.png', 1, False);
 BtnSetEvent(hCancelBtn,BtnClickEventID, CallbackAddr('WizardFormBtnClick'));
 BtnSetFont(hCancelBtn,WFButtonFont.Handle);
 BtnSetFontColor(hCancelBtn, clblack, clblack, clblack, clblack);
 Width:=0;
 Height:=0;
 end;

 with WizardForm.DirBrowseButton do begin
 hDirBrowseBtn:=BtnCreate(WizardForm.Handle, ScaleX(Left+90), ScaleY(Top+164), ScaleX(100), ScaleY(35), 'button.png', 1, False);
 BtnSetEvent(hDirBrowseBtn,BtnClickEventID, CallbackAddr('WizardFormBtnClick'));
 BtnSetFont(hDirBrowseBtn,WFButtonFont.Handle);
 BtnSetFontColor(hDirBrowseBtn, clblack, clblack, clblack, clblack);
 Width:=0;
 Height:=0;
 end;

 with WizardForm.GroupBrowseButton do begin
 hGroupBrowseBtn:=BtnCreate(WizardForm.Handle, ScaleX(Left+90), ScaleY(Top+164), ScaleX(100), ScaleY(35), 'button.png', 1, False);
 BtnSetEvent(hGroupBrowseBtn,BtnClickEventID, CallbackAddr('WizardFormBtnClick'));
 BtnSetFont(hGroupBrowseBtn,WFButtonFont.Handle);
 BtnSetFontColor(hGroupBrowseBtn, clblack, clblack, clblack, clblack);
 Width:=0;
 Height:=0;
 end;
 end;


 function NumToStr(Float: Extended): string;
 begin
 Result:=Format('%.2n', [Float]);
 StringChange(Result, ',', '.');
 while ((Result[Length(Result)]='0') or (Result[Length(Result)]='.')) and (Pos('.',Result)>0) do SetLength(Result,Length(Result)-1);
 end;

 function MbOrTB(Float: Extended): string;
 begin
 if Float<1024 then Result:=NumToStr(Float)+' MB'
 else if (Float/1024)<1024 then Result:=NumToStr(Float/1024)+' GB'
 else if (Float/(1024*1024))<1024 then Result:=NumToStr(Float/(1024*1024))+' TB'
 end;

 procedure GetFreeSpaceCaption(Sender: TObject);
 var
 Enable: Boolean;
 Path: AnsiString;
 FreeMB, TotalMB: Cardinal;
 begin
 Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
 Enable:= GetSpaceOnDisk(Path, True, FreeMB, TotalMB);

 if not Enable then begin
 mb1.Caption:= cm('FreeSpace') + ' ' + '0 Мб';
 mb2.Caption:= cm('NeedSpace') + ' ' + MborTb({#NeedSize});
 WizardForm.NextButton.Enabled:= false;
 BtnSetEnabled(hNextBtn, false);
 Exit;
 end;

 if Enable then begin
 mb1.Caption:= cm('FreeSpace') + ' ' + MbOrTb(FreeMB);
 mb2.Caption:= cm('NeedSpace') + ' ' + MborTb({#NeedSize});
 WizardForm.NextButton.Enabled:= true;
 BtnSetEnabled(hNextBtn, true);
 end;

 if FreeMB < {#NeedSize} then begin WizardForm.NextButton.Enabled:= false; BtnSetEnabled(hNextBtn, false); end else begin WizardForm.NextButton.Enabled:= true; BtnSetEnabled(hNextBtn, true); end;
 end;

 procedure CreateLabel;
 begin
 Welcomelbl1:= TLabel.Create(WizardForm);
 with Welcomelbl1 do
 begin
 Left:= ScaleX(80);
 Top:= ScaleY(244);
 Width:= ScaleX(450);
 Height:= ScaleY(450);
 AutoSize:= false;
 Transparent:= true;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8;
 Font.Color:= clwhite;
 Font.Style := [fsBold];
 Alignment := taCenter;
 Parent:= WizardForm;
 Caption:= cm('Welcome');
 end;

 with WizardForm.DirEdit do begin
 Parent:= WizardForm;
 Left:= ScaleX(100);
 Top:= ScaleY(250);
 Color:= clblack;
 Font.Name:= 'Arial';
 Font.Size:= 9;
 Font.Color:= clwhite;
 Width:= ScaleX(324);
 Height:= ScaleY(18);
 end;

 with WizardForm.GroupEdit do begin
 Parent:= WizardForm;
 Left:= ScaleX(100);
 Top:= ScaleY(250);
 Color:= clblack;
 Font.Name:= 'Arial';
 Font.Size:= 9;
 Font.Color:= clwhite;
 Width:= ScaleX(324);
 Height:= ScaleY(18);
 end;

 Selectlbl1:=TLabel.Create(WizardForm);
 with Selectlbl1 do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(200);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 Caption:= cm('dir1');
 end;

 Selectlbl2:=TLabel.Create(WizardForm);
 with Selectlbl2 do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(216);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 Caption:= cm('dir2');
 end;


 mb1:=TLabel.Create(WizardForm);
 with mb1 do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(278);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 end;

 mb2:=TLabel.Create(WizardForm);
 with mb2 do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(295);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 end;

 WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;

 NoIconsCheck:= TNewCheckbox.Create(WizardForm);
 with NoIconsCheck do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(280);
 Width:= ScaleX(13);
 Height:= ScaleY(13);
 Parent:= WizardForm;
 OnClick:= @NoIconsCheckClick;
 end;

 ExtractTemporaryFile('1.bmp');

 with WizardForm.ComponentsList do begin
 LoadBGBmpFromFile(ExpandConstant('{tmp}\1.bmp'), Left+100, Top+150);
 Parent:= WizardForm;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Font.Color:= clwhite;
 left:= ScaleX(100);
 BorderStyle:= bsNone;
 Top:= ScaleY(200);
 Height:= Height - 50;
 end;
 DeleteFile(ExpandConstant('{tmp}\1.bmp'));

 islbl1:=TLabel.Create(WizardForm);
 with islbl1 do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(255);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 Caption:= cm('Extracted');
 end;

 islbl2:=TLabel.Create(WizardForm);
 with islbl2 do
 begin
 Left:= ScaleX(100);
 Top:= ScaleY(270);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 WordWrap:= true;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 end;

 NoIconsLabel:=TLabel.Create(WizardForm);
 with NoIconsLabel do
 begin
 Left:= ScaleX(120);
 Top:= ScaleY(280);
 Width:= ScaleX(450);
 Height:= ScaleY(200);
 AutoSize:= false;
 Font.Name:= 'Arial';
 Font.Size:= 8
 Font.Style := [fsBold];
 Transparent:= true;
 Font.Color:= clwhite;
 Parent:= WizardForm;
 Caption:= cm('nic');
 OnClick:= @NoIconsLabelClick;
 end;
 end;

 procedure InitializeWizard;
 begin
 s:= WizardForm.Caption;
 Enabled:= true;
 CreateLabel;
 CreateWizardImg;
 ButtonsTextures;
 end;

 procedure CurPageChanged(CurPageID: Integer);
 begin
 SetStateNewButtons;

 Welcomelbl1.Hide;
 WizardForm.DirEdit.Hide;
 WizardForm.GroupEdit.Hide;
 Selectlbl1.Hide;
 Selectlbl2.Hide;
 BtnSetVisibility(hDirBrowseBtn, false);
 BtnSetVisibility(hGroupBrowseBtn, false);
 mb1.Hide;
 mb2.Hide;
 NoIconsCheck.Hide;
 NoIconsLabel.Hide;
 WizardForm.ComponentsList.Hide;
 islbl1.Hide;

 if CurPageID = wpWelcome then
 begin
 Welcomelbl1.Show;
 ImgSetVisibility(form, true);
 ImgSetVisibility(form1, false);
 end;

 if CurPageID = wpSelectDir then
 begin
 GetFreeSpaceCaption(nil);
 Selectlbl2.Caption:= cm('Dir2');
 WizardForm.DirEdit.Show;
 Selectlbl1.Show;
 Selectlbl1.Caption:= cm('Dir1');
 Selectlbl2.Show;
 BtnSetVisibility(hDirBrowseBtn, true);
 ImgSetVisibility(form1, true);
 ImgSetVisibility(form, false);
 mb1.Show;
 mb2.Show;
 end;

 if CurPageID = wpSelectComponents then WizardForm.ComponentsList.Show;

 if CurPageID = wpSelectProgramGroup then
 begin
 Selectlbl1.Caption:= cm('Group1');
 Selectlbl1.Show;
 Selectlbl2.Show;
 Selectlbl2.Caption:= cm('Dir2');
 WizardForm.GroupEdit.Show;
 BtnSetVisibility(hGroupBrowseBtn, true);
 NoIconsCheck.Show;
 NoIconsLabel.Show;
 WizardForm.NextButton.Caption:= 'Установить';
 end;

 if CurPageID = wpSelectTasks then
 begin

 end;

 if CurPageID = wpReady then
 begin
 ImgSetVisibility(form1, true);
 end;

 if CurPageID = wpInstalling then
 begin
 ImgSetVisibility(form, true);
 ImgSetVisibility(form1, false);
 islbl1.Show;
 end;

 if CurPageID = wpFinished then
 begin
 ImgSetVisibility(form, true);
 islbl2.Hide;
 Welcomelbl1.Show;
 Welcomelbl1.Caption:= cm('Fin');
 Welcomelbl1.Top:= Welcomelbl1.Top+ScaleY(5);
 end;

 if (CurPageID = wpFinished) and ISDoneError then
 begin
 Welcomelbl1.Show;
 Welcomelbl1.Font.Color:= clred;
 Welcomelbl1.Caption:= cm('FinError');
 end;
 ImgApplyChanges(WizardForm.Handle);
 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
 WizardForm.ProgressGauge.Hide;
 WizardForm.CancelButton.Hide;
 ISDonePB:= ImgPBCreate(WizardForm.Handle, ExpandConstant('pb2.png'),ExpandConstant('pb1.png'), ScaleX(100), ScaleY(290), ScaleX(420), ScaleY(19));

 WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
 ISDoneCancel:=0;

 ExtractTemporaryFile('unarc.dll');

 #ifdef PrecompInside
 ExtractTemporaryFile('CLS-precomp.dll');
 ExtractTemporaryFile('packjpg_dll.dll');
 ExtractTemporaryFile('packjpg_dll1.dll');
 ExtractTemporaryFile('precomp.exe');
 ExtractTemporaryFile('zlib1.dll');
 #endif
 #ifdef SrepInside
 ExtractTemporaryFile('CLS-srep.dll');
 #endif
 #ifdef facompress
 ExtractTemporaryFile('facompress.dll');
 #endif
 #ifdef records
 ExtractTemporaryFile('records.inf');
 #endif

 Comps1:=0; Comps2:=0; Comps3:=0;
 #ifdef Components
 TmpValue:=1;
 if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue;
 TmpValue:=TmpValue*2;
 if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue;
 TmpValue:=TmpValue*2;
 if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;
 TmpValue:=TmpValue*2;
 if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;
 #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
 if not SrepInit('',512,0) then break;
 if not PrecompInit('',128,PCFVer) then break;
 if not FileSearchInit(true) then break;

 (* if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.fakt'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-2.fakt'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-3.fakt'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-4.fakt'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
 if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'sound.fakt') then break;
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\sound.fakt'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\video.fakt'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
 *)
 ISDoneError:=false;
 until true;
 ImgPBDelete(ISDonePB);
 islbl2.Hide;
 islbl1.Caption:= SetupMessage(msgStatusRunProgram);
 ISDoneStop;
 end;
 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 Enabled then gdipShutdown;
 if ResultStr='' then
 WizardForm.Free;
 end;
в процедуре деинициализации инсталла, вы освобождали WizardForm в любом случае. А если строка в реестре найдена, то инициализации не происходит, поэтому WizardForm не создаётся, и сразу же идёт освобождение не созданного объекта.. Поэтому в деинициализацию нужно было добавить условие.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:00, 12-01-2013 | #1542


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Подскажите, пожалуйста: установщик сам определяет нужно ли перезагружаться по окончании установки (файлы были заняты, или еще что)
И если нужно перегрузиться то последняя страница wpFinished заменяется его "перегрузить сейчас/позже"
Можно эту страницу как-то показывать после wpFinished или еще каким образом сделать так чтобы wpFinished отображалась всегда, а страница перезагрузки - при необходимости?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 20:46, 12-01-2013 | #1543


Аватара для Gnom_aka_Lexander

Ветеран


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

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


R.i.m.s.k.y., это та-же страница, на которой находится RunList и два радиобаттона NeedRestart. есть встроенная функция, с помощью которой ты можешь сам регламентировать необходимость перезагрузки
Цитата:
function NeedRestart(): Boolean;
Возвращает True для указания инсталлятору предложить пользователю перезагрузить систему в конце успешной установки; иначе возвращает False.
управляется точно так-же, как например, InitializeSetup, тоесть как-то так:
Код: Выделить весь код
function NeedRestart(): Boolean;
begin
  Result := твое условие, при выполнении которого необходимо перезагрузиться.
end;

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:03, 12-01-2013 | #1544


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Gnom_aka_Lexander, я в курсе про needrestart
пусть эта страница отображается, можно wpwelcome отобразить раньше страницы необходимости перезагрузки? или как-то дополнить ее своими чекбоксами?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 21:09, 12-01-2013 | #1545


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата R.i.m.s.k.y.:
раньше страницы необходимости перезагрузки? »
нету. страницы. необходимости. перезагрузки.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 21:12, 12-01-2013 | #1546


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата Gnom_aka_Lexander:
нету. страницы. необходимости. перезагрузки. »
я что-то понять не могу
смотрю на редактор форм и вижу что два радиобатона перезагрузки под runlist находятся
если я их сдвигаю - мои чекбоксы в [run] postinstall не отображаются, но работают

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 21:17, 12-01-2013 | #1547


Аватара для Gnom_aka_Lexander

Ветеран


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

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


R.i.m.s.k.y., именно. и показываются они в зависимости от необходимости перезагрузки, каковую необходимость ты можешь задавать сам.
function NeedRestart(): Boolean; как раз показывает-скрывает эти радиобаттноны, каковые лежат на финишной странице, ID каковой таки да, именно wpFinished.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 21:22, 12-01-2013 | #1548


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Gnom_aka_Lexander, вот этого я и не понимаю, если в редакторе форм радиобатоны сдвигаю - перестают отображаться чекбоксы которые я делаю в секции run флагами postinstall
Пусть все вместе отображаются, мне не жалко
Просто у инно продвинутая система определения необходимости перезагрузки и нет нужды ее подменять
Мне нужно на последней финишедпаге вывести пару чекбоксов независимо от результатов needrestart

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 21:42, 12-01-2013 | #1549


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Ладно переформулируем вопрос: как создать свою страницу c чекбоксами перед wpFinished и на nextButtonClick своей страницы повесить свое действие?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 07:21, 13-01-2013 | #1550



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход