Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Raz3r, У меня жуткая лень перепечатывать, предоставлю ссылки: Сообщения: #2115 (http://forum.oszone.net/post-1704291-2115.html), #1665 (http://forum.oszone.net/post-2269416-1665.html).
Поиск (http://forum.oszone.net/search.php) конечно не работает. Когда-то надо начинать пользоваться фильтрами и поиском (http://forum.oszone.net/faq.php?faq=vb_faq#faq_faq_filters). А ещё в помощь (http://forum.oszone.net/faq.php) заглядывать.
Для поиска: растянуть форму, расширить форму, увеличить форму, растянуть страницу, расширить страницу, увеличить страницу, удалить форму, скрыть форму, спрятать форму, исключить форму, пропустить форму, удалить страницу, скрыть страницу, спрятать страницу, исключить страницу, пропустить страницу.
Nordek, вводил в поиске и перерыл всё что можно не нашел
with WizardForm.WelcomePage do
begin
Height := ScaleY(10);
Width := ScaleX(10);
end;
не помогает, лист не убирается и не изменяется всё-равно. А как удалить или отключить этот WelcomePage?
И ещё параллельно возникло два вопроса: Как сделать, чтоб во время установки была кнопка, нажав на которую можно было бы поставить на паузу распаковку, а потом вновь запустить?
Как сделать, чтоб во время установки было +два прогресс бара, которые отображали бы установку компонентов(установка компонентов должна проходить одновременно с основной установкой и только по завершению всех установок выводилось окно завершения)?
Неужели никто не может подсказать? С WelсomePage наконец-то разобрался, а вот что делать с остальным?
Как сделать, чтоб во время установки была кнопка, нажав на которую можно было бы поставить на паузу распаковку, а потом вновь запустить? »Зачем? Смысл? При нажатии на отмену происходит то-же самое - распаковка ставится на паузу, и если не подтвердить отмену - продолжается дальше.установка компонентов должна проходить одновременно с основной установкой »Ну это вы батенька завернули - инно не может параллельно выполнять несколько действий, только последовательно.
nik1967, просто если на паузу поставить это как-то посолиднее выглядит, допустим приостановить, чтоб временно отключить нагрузку на систему. Как при копирование в Windows 8.1 неплохо реализована задумка.
Ну это вы батенька завернули - инно не может параллельно выполнять несколько действий, только последовательно.
Хорошо, а то же самое только последовательно можно?
Отлично, теперь SelectDirPage не изменяется, зажимаю я shift+мышка на SelectDirPage, затем отпускаю Shift и пытаюсь изменить размер, а ничего не получается( Капец, Inno Setup убивает уже такими выходками.
#1283, #1284, #1285, #1286
#1288, #1289
Raz3r, Может хватит уже? Это форум а не чат - Об использовании конференции в качестве чата. (http://forum.oszone.net/rules.html#3.7). Используйте функцию редактирования: Могу ли я редактировать свои сообщения? (http://forum.oszone.net/faq.php?faq=vb_read_and_post#faq_vb_edit_posts)
Отлично, теперь SelectDirPage не изменяется, зажимаю я shift+мышка на SelectDirPage, затем отпускаю Shift и пытаюсь изменить размер »Ничего не понял.
[Code]
procedure RedesignWizardForm;
begin
with WizardForm.DirEdit do
begin
Width := ScaleX(236);
Height := ScaleY(45);
end;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
end;
Nordek, лучшеб помогли мне чем 100 раз одно и тоже копировать вставлять.
В дизайнере форм в Inno Setup Ultra 5.5.1 во вкладке SelectDirPage есть такой лист, на котором лежат все остальные элементы. Называется он SelectDirPage. Он заблокирован, то есть я не могу его не удалить не растянуть, когда удаляю пишет "Компонент SelectDirPage или его части заблокированы". Ваш код я прописывал 100 раз, он не помогает, в ручную растягивать тоже не помогает. Ссылки, которые вы мне кидаете, я уже изучил наизусть и они тоже не помогают!
Я растянул основное окно и мне очень нужно растянуть этот SelectDirPage, потому что все остальные элементы дальше его границ не выходят.
Я растянул основное окно и мне очень нужно растянуть этот SelectDirPage, потому что все остальные элементы дальше его границ не выходят. »
Ну дак Nordek же давал ссылку (http://forum.oszone.net/post-2269416-1665.html), где всё расписано, как надо делать, куда уж ещё проще?
[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010FD03000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E7448656967687403C5010B436C69656E7457696474680329030C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680339030E4578706C6963697448656967687403EB010 D506978656C73506572496E636802600A54657874486569676874020D00F10A544E6577427574746F6E0C43616E63656C427 574746F6E044C65667403BC0203546F700397010C4578706C696369744C65667403BC020B4578706C69636974546F7003970 10000F10A544E6577427574746F6E0A4E657874427574746F6E044C65667403670203546F700397010C4578706C696369744 C6566740367020B4578706C69636974546F700397010000F10A544E6577427574746F6E0A4261636B427574746F6E044C656 674031C0203546F700397010C4578706C696369744C656674031C020B4578706C69636974546F700397010000F10C544E657 74E6F7465626F6F6B0D4F757465724E6F7465626F6F6B055769647468032903064865696768740391010D4578706C6963697 457696474680329030E4578706C6963697448656967687403910100F110544E65774E6F7465626F6F6B506167650B57656C6 36F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E657 74E6F7465626F6F6B5061676509496E6E6572506167650C4578706C696369744C65667402100B4578706C69636974546F700 2080D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6 F6B0D496E6E65724E6F7465626F6F6B05576964746803D902064865696768740335010D4578706C69636974576964746803D 9020E4578706C6963697448656967687403350100F110544E65774E6F7465626F6F6B506167650B4C6963656E73655061676 50D4578706C69636974576964746803D9020E4578706C696369744865696768740335010000F110544E65774E6F7465626F6 F6B506167650D53656C656374446972506167650C4578706C696369744C65667402C00D4578706C69636974576964746803A 1010E4578706C6963697448656967687403ED0000F10E544E6577537461746963546578740E4469736B53706163654C61626 56C03546F700318010B4578706C69636974546F700318010000F10A544E6577427574746F6E0F44697242726F77736542757 4746F6E044C65667403760203546F7002440C4578706C696369744C6566740376020B4578706C69636974546F7002440000F 10554456469740744697245646974055769647468036C020D4578706C696369745769647468036C0200000000000000
[Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
procedure RedesignWizardForm;
begin
with WizardForm do
begin
AutoScroll := False;
ClientHeight := ScaleY(453);
ClientWidth := ScaleX(809);
end;
with WizardForm.CancelButton do
begin
Left := ScaleX(700);
Top := ScaleY(407);
end;
with WizardForm.NextButton do
begin
Left := ScaleX(615);
Top := ScaleY(407);
end;
with WizardForm.BackButton do
begin
Left := ScaleX(540);
Top := ScaleY(407);
end;
with WizardForm.OuterNotebook do
begin
Width := ScaleX(809);
Height := ScaleY(401);
end;
with WizardForm.InnerNotebook do
begin
Width := ScaleX(729);
Height := ScaleY(309);
end;
with WizardForm.DiskSpaceLabel do
begin
Top := ScaleY(280);
end;
with WizardForm.DirBrowseButton do
begin
Left := ScaleX(630);
Top := ScaleY(68);
end;
with WizardForm.DirEdit do
begin
Width := ScaleX(620);
end;
{ ReservationBegin }
// Вы можете добавить ваш код здесь.
{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!
procedure InitializeWizard();
begin
RedesignWizardForm;
end;
Если так, то это всё делается в редакторе форм.
Как сделать, чтоб во время установки была кнопка, нажав на которую можно было бы поставить на паузу распаковку, а потом вновь запустить? »
#define NeedSize "5000000000"
#define NeedMem 512
#define SecondProgressBar
;#define Components
;#define records
;#define facompress
;#define PrecompInside
;#define SrepInside
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define PackZIP
[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
DefaultGroupName=ISDone Example
OutputDir=.
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=yes
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
#ifdef Components
[Types]
Name: full; Description: Full installation; Flags: iscustom
[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
#endif
[Registry]
Root: HKLM; Subkey: Software\ProFrager; ValueName: path; ValueType: String; ValueData: {app}; Flags: uninsdeletekey; Check: CheckError
Root: HKLM; Subkey: Software\ProFrager; ValueName: name; ValueType: String; ValueData: Data; Flags: uninsdeletekey; Check: CheckError
[Icons]
Name: {group}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError
Name: {commondesktop}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError
[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
Name: PhysXCheck; Description: Установить Nvidia PhysX
[Run]
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Tasks: VCCheck; Check: CheckError
Filename: {src}\Redist\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError
[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.42"
Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#else
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif
[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:
; пауза по русски
russian.Pause=Пауза
; продолжить по русски
russian.Resume=Продолжить
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[UninstallDelete]
Type: filesandordirs; Name: {app}
[Code]
const
PCFonFLY=true;
notPCFonFLY=false;
var
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
LabelPct2: TLabel;
ISDoneProgressBar2:TNewProgressBar;
#endif
MyCancelButton:TButton;
PauseButton:TButton; // объявляем свою кнопку пауза
PauseFlag:boolean; // объявляем флаг для разных состояний кнопки пауза
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;
type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';
function 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 ISDoneProgressBar1.Position := OveralPct;
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
if PauseFlag = false then begin // переделываем строки: прошло, осталось для кнопки пауза
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
end else begin
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+ExpandConstant('{cm:Pause}');
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+'?';
end;
Result := ISDoneCancel;
end;
procedure CancelButtonOnClick(Sender: TObject); // переделываем обработчик кнопки отмена, что бы не было ошибки при отмене во время паузы
begin
if PauseFlag = false then begin
SuspendProc;
ISDoneProgressBar1.State:= npbsPaused; // это чтобы красивше было :)
#ifdef SecondProgressBar
ISDoneProgressBar2.State:= npbsPaused;
#endif
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then begin
ISDoneCancel:=1;
ResumeProc;
end else begin
ISDoneProgressBar1.State:= npbsNormal;
#ifdef SecondProgressBar
ISDoneProgressBar2.State:= npbsNormal;
#endif
ResumeProc;
end;
end else begin
ResumeProc;
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then begin
ISDoneCancel:=1;
ResumeProc;
end else begin
ResumeProc;
SuspendProc;
end;
end;
end;
procedure PauseButtonOnClick(Sender: TObject); // обработчик нажатия кнопки пауза
begin
if PauseFlag = false then begin
SuspendProc;
PauseButton.Caption:=ExpandConstant('{cm:Resume}');
ISDoneProgressBar1.State:= npbsPaused; // это чтобы красивше было :)
#ifdef SecondProgressBar
ISDoneProgressBar2.State:= npbsPaused;
#endif
PauseFlag:= true;
end else begin
ResumeProc;
PauseButton.Caption:=ExpandConstant('{cm:Pause}');
ISDoneProgressBar1.State:= npbsNormal;
#ifdef SecondProgressBar
ISDoneProgressBar2.State:= npbsNormal;
#endif
PauseFlag:= false;
end;
end;
procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
MyCancelButton.Hide;
PauseButton.Hide; // скрываем свою скнопку пауза
#ifdef SecondProgressBar
ISDoneProgressBar2.Hide;
LabelPct2.Hide;
#endif
end;
procedure CreateControls;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+ScaleX(5);
Top := ISDoneProgressBar1.Top + ScaleY(2);
Width := ScaleX(80);
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+ScaleX(30);
Left := ScaleX(0);
Top := ScaleY(30);
end;
#ifdef SecondProgressBar
PBTop:=PBTop+ScaleY(25);
ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar2 do begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := PBTop+ScaleY(8);
Width := ISDoneProgressBar1.Width;
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
end;
LabelPct2 := TLabel.Create(WizardForm);
with LabelPct2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar2.Width+ScaleX(5);
Top := ISDoneProgressBar2.Top + ScaleY(2);
Width := ScaleX(80);
end;
#endif
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
LabelTime3 := TLabel.Create(WizardForm);
with LabelTime3 do begin
Parent := WizardForm.FinishedPage;
AutoSize := False;
Width := 300;
Left := 180;
Top := 200;
end;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(355);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
PauseButton:=TButton.Create(WizardForm); // добавляем кнопку паузы
with PauseButton do begin
Parent:=WizardForm;
Left:= ScaleX(8);
Top:= ScaleY(327);
Width:= ScaleX(75);
Height:= ScaleY(23);
Caption:=ExpandConstant('{cm:Pause}');
OnClick:=@PauseButtonOnClick;
end;
end;
Procedure CurPageChanged(CurPageID: Integer);
Begin
PauseFlag:= false; // устанавливаем флаг кнопки пауза в нужное состояние
if (CurPageID = wpFinished) and ISDoneError then
begin
LabelTime3.Hide;
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;
function CheckError:boolean;
begin
result:= not ISDoneError;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Hide;
CreateControls;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
ISDoneCancel:=0;
// Распаковка всех необходимых файлов в папку {tmp}.
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 MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
#if precomp == "0.38"
ExtractTemporaryFile('precomp038.exe');
#else
#if precomp == "0.4"
ExtractTemporaryFile('precomp040.exe');
#else
#if precomp == "0.41"
ExtractTemporaryFile('precomp041.exe');
#else
#if precomp == "0.42"
ExtractTemporaryFile('precomp042.exe');
#else
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('precomp040.exe');
ExtractTemporaryFile('precomp041.exe');
ExtractTemporaryFile('precomp042.exe');
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
ExtractTemporaryFile('7z.dll');
ExtractTemporaryFile('PackZIP.exe');
#endif
ExtractTemporaryFile('English.ini');
// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4
// .....
// см. справку
#endif
#ifdef precomp
PCFVer:={#precomp};
#else
PCFVer:=0;
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
// ChangeLanguage('English');
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}\data1.cst'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
// далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
if not ISRarExtract ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'), ExpandConstant('{app}\data.7z'), true) then break;
if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'), ExpandConstant('{app}\out.dat'), false, false) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;
// распаковка группы файлов посредством внешнего приложения
FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
ExecError:=false;
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFilePath:=ISGetName(1);
OutFileName:=ISGetName(2);
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
end;
ISFindFree(FindHandle1);
if ExecError then break;
*)
ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;
Как сделать, чтоб во время установки было +два прогресс бара, которые отображали бы установку компонентов(установка компонентов должна проходить одновременно с основной установкой и только по завершению всех установок выводилось окно завершения)? »
А вот это так и не понял - в стандартном примере IsDone и так вроде 2 прогрессбара?
OtherNickname
06-08-2014, 15:33
Доброго времени суток. Пожалуйста, помогите найти решение. Как отменить автоматическое закрытие страницы с процессом установки InstallingPage после завершения установки?
nik1967, Ну дак Nordek же давал ссылку, где всё расписано, как надо делать, куда уж ещё проще?
В том то и дело, что пробовал как он советовал и не помогло, ну да ладно, это уже не важно.
Благодарю за IsDone, но можно написать отдельно куда вносились изменения, просто у меня уже задействован по своему измененный isdone?
А вот это так и не понял
Я думал сделать второй прогресс бар рядом с основным, который отображал бы установку компонентов.
но можно написать отдельно куда вносились изменения »
Так вообще то я всё, что добавил, отметил комментами - посмотри скрипт внимательно.
Я думал сделать второй прогресс бар рядом с основным, который отображал бы установку компонентов. »
Типа моего в инсталле Каталистов, что ли? И не компонентов, а доп.по?
habib2302
06-08-2014, 22:23
Доброе время суток. Помогите мне со скриптом для удаления других версий приложения при старте.
дело в том, что во время тихой установки появляется MsgBox('Перед установкой необходимо удалить все старые версии приложения, вызвать программы удаления сейчас?')
как организовать, чтобы это уведомление и деинсталляторы других версий запускались скрыто при тихой установки
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
AppId=TheBestAidaInstallEver
[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
APPID_AIDA_EXTREME = 'AIDA64 Extreme Edition';
APPID_AIDA_BUISNES = 'AIDA64 Business Edition';
WAIT_OBJECT_0 = $0;
STARTF_USESHOWWINDOW = 1;
NORMAL_PRIORITY_CLASS = $00000020;
INFINITE = $FFFFFFFF; { Infinite timeout }
type
_STARTUPINFO = record
cb: DWORD;
#ifdef UNICODE
lpReserved, lpDesktop, lpTitle: PAnsiChar;
#else
lpReserved, lpDesktop, lpTitle: PChar;
#endif
dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
wShowWindow, cbReserved2: Word;
lpReserved2: Byte;
hStdInput, hStdOutput, hStdError: THandle;
end;
_PROCESS_INFORMATION = record
hProcess: THandle;
hThread: THandle;
dwProcessId: DWORD;
dwThreadId: DWORD;
end;
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
#ifdef UNICODE
function CreateProcess(lpApplicationName, lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: Longint; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment, lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _STARTUPINFO; var lpProcessInformation: _PROCESS_INFORMATION): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';
#else
function CreateProcess(lpApplicationName, lpCommandLine: PChar; lpProcessAttributes, lpThreadAttributes: Longint; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment, lpCurrentDirectory: PChar; const lpStartupInfo: _STARTUPINFO; var lpProcessInformation: _PROCESS_INFORMATION): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';
#endif
function GetUninstallPath(const AppIds: array of String): array of String;
var
StringList: TStringList;
i, Len: Integer;
Buff: String;
begin
for i := 0 to GetArrayLength(AppIds)-1 do
begin
Buff := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppIds[i] + '_is1,UninstallString|}'));
if Buff <> '' then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := Buff;
end;
end;
end;
procedure UninstallApps(const UninstallPathes: array of String);
var
pi: _PROCESS_INFORMATION;
si: _STARTUPINFO;
i: Integer;
begin
for i := 0 to GetArrayLength(UninstallPathes)-1 do
begin
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWNORMAL;
#ifdef UNICODE
if not CreateProcess('', PAnsiChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
#else
if not CreateProcess('', PChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
#endif
begin
MsgBox(SysErrorMessage(DLLGetLastError), mbCriticalError, MB_OK);
Exit;
end;
try
while WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_OBJECT_0 do Application.ProcessMessages;
finally
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
end;
end;
function InitializeSetup(): Boolean;
var
i, Len: Integer;
uArray: array of String;
begin
uArray := GetUninstallPath( ['{#SetupSetting("AppID")}', APPID_AIDA_EXTREME, APPID_AIDA_BUISNES] );
Len := GetArrayLength(uArray);
Result := Len = 0;
if not Result then if MsgBox('Перед установкой необходимо удалить все старые версии приложения, вызвать программы удаления сейчас?', mbError, MB_YESNO) = IDYES then
begin
UninstallApps(uArray);
Result := InitializeSetup();
end;
end;
Habetdin
06-08-2014, 22:39
habib2302, сделайте в нужном месте проверку:
if Pos('silent', Lowercase(GetCmdTail)) = 0 then
// обычное удаление
else
// тихое удаление
Типа моего в инсталле Каталистов, что ли? И не компонентов, а доп.по?
Да, именно такой.
лучшеб помогли мне чем 100 раз одно и тоже копировать вставлять. »А вы внимательно читайте и принимайте во внимание.
Он заблокирован, то есть я не могу его не удалить не растянуть, когда удаляю пишет "Компонент SelectDirPage или его части заблокированы". »Раз уж непонятно - поверьте, я это приму во внимание.
Ну дак Nordek же давал ссылку, где всё расписано, как надо делать, куда уж ещё проще? »В этом сообщении (http://forum.oszone.net/post-2379913-6791.html) отражена вся правда.
Кроме всего прочего есть просто ленивые люди: в этом неоднократно был убеждён.
Это ещё раз доказывает:
ну да ладно, это уже не важно. » т.е сделали за них и хорошо, остальное не волнует. Это вместо того, чтоб разобраться.
Что удивительно. Когда говоришь или пишешь человеку о том что он "ленивый" - то этот человек обижается и считает за оскорбление. Либо пытается доказать обратное.
Nordek, думаешь мне в прикол сидеть 3 дня и пытаться растянуть это дурацкую забагованую форму в дизайнере, вместо того, что бы перерыть все твои сообщения сначала, до конца? Это по твоему говорит о моей лени? Если не работает, значит ты чего-то недописал там, либо какой-то баг. И я тебе в лс писал просил сразу помочь, чтобы тут не превращать форум в чат, потому что проект, который я задумал большой, а я один, помочь мне кроме вас некому. Но ты решил проигнорить мою просьбу, а теперь говоришь, что мне лень, молодец!
P.S: Я уже 3 месяца обновляю свою сборку толком не отрываясь от работы, это называется лень мне да?
Что удивительно. Когда говоришь или пишешь человеку о том что он "ленивый" - то этот человек обижается и считает за оскорбление. Либо пытается доказать обратное.
Не суди о человеке по пару предложений, написанных на форуме.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC