Inno Setup (создание инсталяционных пакетов). Часть 2

Статус
В этой теме нельзя размещать новые ответы.

YURSHAT

Тех. админ
Администратор
Inno Setup часть 2
(часть 1)​

Это мощное бесплатное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки.
По сравнению с NSIS (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта, но генерит на 200-300 кб больший инсталятор. На данный момент он конкурирует и даже превосходит многие коммерческие установщики по функциональности и стабильности.

Последние версии:
Inno Setup QuickStart Pack (ansi) 5.5.1 [09.07.2012]
Скачать (1.8 Mb)
Inno Setup QuickStart Pack (unicode) 5.5.1 [09.07.2012]
Скачать (2.2 Mb)
Что нового? |По русски :)| Все сборки
Русский язык для Inno Setup версии 5.5.0 от vadimsva [02.06.2012]
Скачать

Расширенная версия от китайских собратьев. Домашняя страница ResTools
Добавляет списку компонентов возможность сворачивать дочерние элементы.
Содержит более удобный редактор, кроме того, компилятор имеет множество других возможностей и новых функций.
На сайте автора также есть дополнительные библиотеки.
Последние версии:
Inno Setup Compiler 5.5.1 build 120808
Скачать (2.96 Mb) | Зеркало (1.7 Mb) - Убраны картинки для уменьшения веса архива
Inno ISCmplr Setup 5.5.1 build 120726
Скачать (1.8 Mb) | Зеркало
Русский язык для Inno Setup Enhanced (Restools) версии 5.4.x (ansi и unicode) от vadimsva
Скачать

Русская справка к версии 5.5.1, автор перевода BagIra, [USER]bugron[/USER]
Скачать

Сборки:
InnoSetup Ultra
Сборка инструментов для работы со скриптами InnoSetup.
Текущая версия компилятора – 5.5.1. Обновлено 2 Октября 2012г.
Содержит в себе все обновленные инструменты для работы, сборка постоянно обновляется.
Автор сборки: [USER]Gnom[/USER]
Скачать | InnoUltra-lite version | Апдейт (миниинсталл)
 
Последнее редактирование модератором:

sergey3695

Ветеран
Модератор
Как сделать, чтобы проценты в деинсталляторе округлялись до десятых. Надеюсь сам вопрос и суть его понятна.
pr:=i1*100/i2;
p:=+Format('%f',[pr])+'%';
StringChange(p,',','.');
ImgPBSetPosition(PB,pr);
 
Последнее редактирование:

murlakatamenka

Новичок
Сори, продублирую пост
Хочу сделать красивый splash для Mass Effect 3, что-то похожее можно было видеть концовках трейлеров Mass Effect 2: сначала плавно появляется надпись Mass Effect, потом цифра 2, потом всё вместе исчезает.
Делаю через callnsis + advsplash.
>>
но в этом случае сначала появляется и исчезает "Mass Effect", а потом появляется и исчезает "3", что логично, т.к. 2-ая процедура callplug вызывается после завершения первой. а надо чтобы обе процедуры вызывались одновременно (времена в параметрах процедур именно для этого и подобраны). как быть?
может у кого идеи есть, как реализовать?
я пока что додумался только gif-ку создать и попробовать через неё.
 
Последнее редактирование:

Azerbaijan1992

Мимокрокодил
парни помогите пожалуйста,выдает вот такую ошибку
скрипт от r.g.механики
[MOD=Gnom]Убирай картинки под спойлер. По вопросу - при деинсталляции нет фукций распаковки файлов.[/MOD]
[ADMIN="Shegorat"]При деинсталляции нельзя использовать модуль b2p, нужно использовать стандартные функции ботвы.[/ADMIN]
 
Последнее редактирование модератором:

Avangard

Участник
Azerbaijan1992
Требуется расширенная версия Inno Setup от китайцев.
[MOD=Gnom]А на скрине не она, случайно?[/MOD]
 
Последнее редактирование модератором:
  • Like
Реакции: MMR

sergey3695

Ветеран
Модератор
Последнее редактирование:

Saratov

Мимокрокодил
Здравствуйте, у меня вопрос - как сделать так что-бы инсталлятор при выполнении секции run незамирал, а был кликабельным и отвечал на все действия пользователя, нашёл скрипт:ExecAndWait.iss от Sereg-и, но у меня неполучается скомпилировать его. Спасибо!!!
 

sergey3695

Ветеран
Модератор
Здравствуйте, у меня вопрос - как сделать так что-бы инсталлятор при выполнении секции run незамирал, а был кликабельным и отвечал на все действия пользователя, нашёл скрипт:ExecAndWait.iss от Sereg-и, но у меня неполучается скомпилировать его. Спасибо!!!
Там же есть описание как им пользоваться. Если ты конечно не пробывал скомпилировать модуль.
 

murlakatamenka

Новичок
С помощью isgsg.dll сделай.
но что поменяется при этом, только процедура и dll-ка, но по сути то же самое будет
например
Ну, наверно только так
да, что-то типа такого, спасибо.
один из участников форума поделился своей dll-кой, к-рая поодходит для моих нужд.
 
Последнее редактирование:

AntonOVS

Новичок
Нуждаюсь в помощи:
Как сделать так, чтобы при отсутствии файла компонента, страница с выбором компонентов в инсталляторе не появлялась ? То есть если бы отсутствовал, архив с компонентом, то этой бы страницы не было:
http://i29.fastpic.ru/big/2012/0302/d5/dab0dee0db4eaeba7f88eb8ba2af97d5.jpg
Скрипт:
;Название игры
#define appname "The Elder Scrolls V. Skyrim"
;Версия игры
#define appver "1.4.27.0.4"
;Ваш ник
#define RePacker "AntonOVS"
;Exe
#define exe "SkyrimLauncher.exe"
;Реестр
;#define Registry
;Сколько требуется для установки
#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]
AppId={{49BA2453-69E4-4985-A03A-CD7FC9A69E14}
AppName={#appname}
AppVerName={#appname} v{#appver}
DefaultDirName={pf}\{#appname}
DefaultGroupName=Games\{#appname}
AllowNoIcons=yes
OutputDir=.
ShowTasksTreeLines=yes
OutputBaseFilename={#appname}
VersionInfoCopyright={#RePacker}
VersionInfoDescription={#appname} / RePack by {#RePacker}
WizardImageFile=Files\164x314.bmp
WizardSmallImageFile=Files\55x58.bmp
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

#ifdef Components
[Types]
Name: full; Description: HighResTexturePack + Fix; Flags: iscustom

[Components]
Name: textures; Description: HighResTexturePack + Fix; Types: full; ExtraDiskSpaceRequired: 100000000
#endif

#ifdef Registry
[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
#endif

[Icons]
Name: "{group}\{#appname}{#appver}"; Filename: "{app}\{#exe}";
Name: "{group}\{cm:UninstallProgram,{#appname}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#appname}"; Filename: "{app}\{#exe}"; Tasks: desktopicon

[Tasks]
Name: desktopicon; Description: Добавить ярлык на рабочий стол; GroupDescription: Создание ярлыков:
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Redist\DirectXCheck; Description: Обновить DirectX; Flags: unchecked
Name: Redist\PhysXCheck; Description: Установить Nvidia PhysX; Flags: unchecked
Name: Redist\VCCheck; Description: Установить Microsoft Visual C++ Redist; Flags: unchecked

[Run]
Filename: {src}\Soft\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ Redist x86...; Flags: skipifdoesntexist; Tasks: Redist\VCCheck; Check: CheckError and not IsWin64
Filename: {src}\Soft\vcredist_x64.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ Redist x64...; Flags: skipifdoesntexist; Tasks: Redist\VCCheck; Check: CheckError and IsWin64
Filename: {src}\Soft\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: Redist\PhysXCheck; Check: CheckError
Filename: {src}\Soft\DXSETUP.exe; Parameters: /silent; StatusMsg: Обновляем DirectX...; Flags: skipifdoesntexist; Tasks: Redist\DirectXCheck; 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=Время установки:

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

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

Код:
const
  PCFonFLY=true;
  notPCFonFLY=false;
var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton: TButton;
  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));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.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(360);
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  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('textures') then Comps1:=Comps1+TmpValue;     //компонент 1
//    .....
// см. справку
#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 FileSearchInit(false) then break;
        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\skyrim.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break;
        if not ISArcExtract ( 1, 0, ExpandConstant('{src}\textures.arc'), ExpandConstant('{app}\textures\'), '', false, '', '', '', notPCFonFLY) 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;

procedure InitializeWizard();
begin
WizardForm.Position:=poScreenCenter;
end;
[/spoiler]
Заранее спасибо...
 

LexBell

Борода
Супер модератор
AntonOVS, есть встроенная функция ShouldSkipPage, как раз для того и служит. Принимает любые булевы условия, при положительном ответе скрывает указанную страницу.
[SOURCE="iss"]function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpSelectComponents then
Result:= not FileExists('полный путь и имя файла');
end;[/SOURCE]
 

Avangard

Участник
AntonOVS
Код:
[Code] 
 function ShouldSkipPage(PageID: Integer): Boolean; 
 begin 
   if (PageID = wpSelectComponents) and (not FileExists(ExpandConstant('{src}\main\proga.exe'))) then Result:= true; 
 end;
[MOD=Edison007]нет смысла дублировать ответы, выше дан, точно такой же...[/MOD]
 
Последнее редактирование модератором:

alakir

Мимокрокодил
Доброго времени суток.
Помогите, пожалуйста с скриптом.
Задачи: исправить скрипт таким образом, что б файлы для деинсталляции - "unins000.dat" и "unins000", при инсталляции перемещались в папку - "uninstall".
В данный момент, после распаковки файлов в корневом каталоге создается папка - "uninstall", но файлы удаления лежат не в ней, а в корневом каталоге игры.
Вот скрипт:
#define GameName "Game_name"
#define Version ""

#define Publisher "al'akir"
#define About "Перепаковка by al'akir."
#define URL "http://ya.ru//"

#define ExeName "game.exe"
#define ExeDir ""

#define HDD "9000"

[Setup]
SourceDir=.
OutputDir=F:\3 Compill Files
AppName={#GameName}
AppVerName={#GameName} {#Version}
AppPublisher=al'akir
AppCopyright=al'akir
DefaultDirName=D:\{#GameName}
DefaultGroupName={#GameName}
OutputBaseFilename=al1
SetupIconFile=bmpFile\setupicon.ico
Compression=lzma2
InternalCompressLevel=ultra64
SolidCompression=true
DiskSpanning=yes
DiskSliceSize=900000000
SlicesPerDisk=9
VersionInfoCompany=al'akir - nk
VersionInfoCopyright=al'akir
VersionInfoProductName={#GameName}

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

[Messages]
ru.ExitSetupMessage=Отменить установку игры {#GameName} {#Version}?
ru.SetupWindowTitle={#GameName}
ru.UninstallAppFullTitle={#GameName}
ru.UninstalledAll=Игра {#GameName} {#Version} удалена с Вашего комьпьтера.
ru.ConfirmUninstall=Удалить {#GameName} {#Version}?

[CustomMessages]
ru.WL=%n{#about}
ru.SL=Путь установки:
ru.Free=Доступно:
ru.Need=Требуется:
ru.GL=Возможные автоустановки:
ru.IL=Обновление софта.
ru.IL2=Создание ярлыков.
ru.IL3=Запись реестра.
ru.RL=Все готово для установки {#GameName}
ru.InstL=Установка
ru.PL=Распаковка файлов ...
ru.FL=Игра {#GameName} установлена.
ru.FL2=Желаю приятно провести время :)
ru.FL3=(c) al'akir - nk 2012г.
ru.UNL=Деинсталяция

[Files]
Source: done4\*; DestDir: {tmp}
Source: bmpFile\*; Flags: dontcopy
Source: bmpFile\icon.ico; DestDir: {app}
Source: bmpFile\*; DestDir: {app}\uninstall; Flags: ignoreversion; Attribs: hidden system

Source: F:\2 Instalizing Files\Game_name\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\{#GameName}; Filename: {app}\{#ExeDir}{#ExeName}; WorkingDir: {app}\{#ExeDir}; Comment: {#GameName}
Name: {userdesktop}\{#GameName}; Filename: {app}\Game_name.exe; WorkingDir: {app}; Comment: {#GameName}

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

Код:
type
  TCallback = function (Pct: integer;CurrentFile:string): longword;
  TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

var
  WelcomeLabel ,
  SelectLabel , NeedSpaceLabel , FreeSpaceLabel ,
  GroupLabel , IconsLabel ,
  ReadyLabel ,
  InstallingLabel , ProgressLabel ,
  FinishedLabel ,
  UNInstallingLabel                                 : TLabel;

  Bmp                                               : TBitmapImage;
  FreeMB , TotalMB                                  : Cardinal;
  SizeStr                                           : String;
  SizeInt , SymbolNumber , res , OveralPct          : Integer;
  ISDoneProgressBar                                 : TNewProgressBar;
  CallBack                                          : longword;
  AboutButton                                       : TButton;


const
  color1 = clWhite;
////////////////////////////////////////////////////////////////////////   clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray
////////////////////////////////////////////////////////////////////////   clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite


////////////////////////////////////////////////////////////////////////
procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: string; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: String):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: string; DeleteInFile:boolean; callback: longword; Password: String):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';
function ISRarExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: string; DeleteInFile:boolean; callback: longword; Password: String):BOOL; external 'ISRarExtract@files:ISDone.dll stdcall';
function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: string; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: string; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
//function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:string):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
//function StartRecord(RecordFileName:string; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
//function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
//function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';


////////////////////////////////////////////////////////////////////////
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 GetSize(): Integer;
begin
  SizeStr:= WizardForm.DiskSpaceLabel.Caption;
  for SymbolNumber:= 97 to 122 do begin
    while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1);
      while (Pos( AnsiUppercase(Chr(SymbolNumber)), SizeStr) > 0) do Delete(SizeStr, Pos( AnsiUppercase(Chr(SymbolNumber)), SizeStr),1); end ;
  for SymbolNumber:= 192 to 255 do begin
    while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1); end;
      while (Pos('.', SizeStr) > 0) do Delete(SizeStr, Pos('.', SizeStr), 1)
 end;

function CompareNum(FirstNum, SecondNum: Integer): Boolean;
begin
if FirstNum < SecondNum then Result:= False else Result:= True;
end;

Function MbOrTb( Byte: Extended): String ;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + 'Мб' else
  if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' Гб' else
     Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' Тб'
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  FreeSpaceLabel.Caption:= ExpandConstant(' {cm:Free} ') + MbOrTb(FreeMB)
  NeedSpaceLabel.Caption := ExpandConstant('{cm:Need} ') + MbOrTb(SizeInt)
if WizardForm.CurPageID = wpSelectDir then begin
  WizardForm.NextButton.Enabled:= CompareNum(FreeMB, SizeInt)
end;
end;


////////////////////////////////////////////////////////////////////////
procedure AppProcessMessage;
var Msg: TMessage;
begin
  while PeekMessage(Msg, 0, 0, 0, 1) do begin TranslateMessage(Msg); DispatchMessage(Msg); end;
end;

function ProgressCallback(Pct: integer; CurrentFile:string): longword;
begin
  if Pct<=ISDoneProgressBar.Max then ISDoneProgressBar.Position := Pct;
  AppProcessMessage;
end;

////////////////////////////////////////////////////////////////////////
procedure url(sender:tobject);
begin
  shellexec('open', '{#URL}', '', '',sw_shownormal, ewnowait, res)
end;


////////////////////////////////////////////////////////////////////////
function InitializeSetup: Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\isskin.dll')) then ExtractTemporaryFile('isskin.dll');
  if not FileExists(ExpandConstant('{tmp}\Skin.cjstyles')) then ExtractTemporaryFile('Skin.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
  Result:=True;
end;


////////////////////////////////////////////////////////////////////////
procedure Size();
begin
with WizardForm do begin
  ClientWidth:=750; ClientHeight:=540;
  position:=poScreenCenter;
end;

with WizardForm.PageNameLabel do begin hide; end;
with WizardForm.PageDescriptionLabel do begin hide; end;
with WizardForm.WelcomeLabel1 do begin hide; end;
with WizardForm.WelcomeLabel2 do begin hide; end;
with WizardForm.DiskSpaceLabel do begin hide; end;
with WizardForm.SelectDirBrowseLabel do begin hide; end;
with WizardForm.SelectDirLabel do begin hide; end;
with WizardForm.FinishedHeadingLabel do begin hide; end;
with WizardForm.FinishedLabel do begin hide; end;
with WizardForm.MainPanel do begin hide; end;
with WizardForm.FilenameLabel do begin hide; end;
with WizardForm.StatusLabel do begin hide; end;
with WizardForm.SelectStartMenuFolderBrowseLabel do begin hide; end;
with WizardForm.SelectStartMenuFolderLabel do begin hide; end;
with WizardForm.ReadyLabel do begin hide; end;
with WizardForm.WizardBitmapImage do begin hide; end;
with WizardForm.WizardBitmapImage2 do begin hide; end;
with WizardForm.WizardSmallBitmapImage do begin hide; end;
with WizardForm.SelectDirBitmapImage do begin hide; end;
with WizardForm.GroupEdit do begin hide; end;
with WizardForm.GroupBrowseButton do begin hide; end;
with WizardForm.ReadyMemo do begin top:=600; end;
with WizardForm.SelectGroupBitmapImage do begin hide; end;

with WizardForm.InnerNotebook do begin left:=0; top:=0; width:=750; height:=540; end;
with WizardForm.OuterNotebook do begin left:=0; top:=0; width:=750; height:=540; end;
end;


////////////////////////////////////////////////////////////////////////
procedure Image();
begin
  ExtractTemporaryFile('1.bmp');
  ExtractTemporaryFile('2.bmp');
  ExtractTemporaryFile('3.bmp');
  ExtractTemporaryFile('4.bmp');
  ExtractTemporaryFile('5.bmp');
  ExtractTemporaryFile('out.bmp');
  ExtractTemporaryFile('td.bmp');
  ExtractTemporaryFile('lr.bmp');
  ExtractTemporaryFile('icon.ico');


//welcome
  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=725; Bmp.Height:=437;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.WelcomePage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=582; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.WelcomePage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.WelcomePage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=437; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.WelcomePage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.WelcomePage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=735;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.WelcomePage;

//select
  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=725; Bmp.Height:=437;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectDirPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=582; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectDirPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectDirPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=437; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectDirPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectDirPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=735;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectDirPage;

//groap
  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=725; Bmp.Height:=437;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectProgramGroupPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=582; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectProgramGroupPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectProgramGroupPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=437; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectProgramGroupPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectProgramGroupPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=735;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.SelectProgramGroupPage;

//ready
  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\4.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=725; Bmp.Height:=437;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.ReadyPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=582; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.ReadyPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.ReadyPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=437; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.ReadyPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.ReadyPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=735;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.ReadyPage;

//Installing
  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\5.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=725; Bmp.Height:=437;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.InstallingPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=582; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.InstallingPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.InstallingPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=437; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.InstallingPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.InstallingPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=735;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.InstallingPage;

//Finished
  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=725; Bmp.Height:=437;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.FinishedPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=582; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.FinishedPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.FinishedPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=437; Bmp.Left:=12;
  Bmp.Width:=726; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.FinishedPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=12;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.FinishedPage;

  Bmp:= TBitmapImage.Create(WizardForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=0; Bmp.Left:=735;
  Bmp.Width:=3; Bmp.Height:=439;
  Bmp.Stretch:= true;
  Bmp.Parent:= WizardForm.FinishedPage;
end;


////////////////////////////////////////////////////////////////////////
procedure WizardLabel();
begin
  WelcomeLabel:= TLabel.Create(WizardForm);
with WelcomeLabel do begin
  AutoSize:=false;
  Left:=100; Top:=430;
  Width:=550; Height:=45;
  Font.Name:='Comic Sans MS';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:WL}');
  Parent:=WizardForm.WelcomePage;
  Transparent:=True;
  Alignment := taCenter;
end;


  SelectLabel:= TLabel.Create(WizardForm);
with SelectLabel do begin
  AutoSize:=false;
  Left:=157; Top:=452;
  Width:=550; Height:=30;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:SL}');
  Parent:=WizardForm.SelectDirPage;
  Transparent:=True;
end;

with WizardForm.DirEdit do begin
  top:=455; Left:=300;
  Font.Name:='Comic Sans MS';
  Font.Color:=color1;
  Font.Size:=9;
  Font.Style:=[fsBold, fsItalic];
end;

#ifdef hdd
  SizeInt:= {#hdd}
#else
  SizeInt:= GetSize;
#endif

  NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do begin
  left:=320; Top:=480;
  Parent := WizardForm.SelectDirPage;
  Transparent:=true;
  Font.Name:='Arial Narrow';
  Font.Size:=8;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
end;

  FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do begin
  left:=480; Top:=480;
  Parent := WizardForm.SelectDirPage;
  Transparent:=true;
  Font.Name:='Arial Narrow';
  Font.Size:=8;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
end;

  WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;


  GroupLabel:= TLabel.Create(WizardForm);
with GroupLabel do begin
  AutoSize:=false;
  Left:=450; Top:=440;
  Width:=550; Height:=30;
  Font.Name:='Segoe Print';
  Font.Size:=14;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:GL}');
  Parent:=WizardForm.SelectProgramGroupPage;
  Transparent:=True;
end;

  IconsLabel:= TLabel.Create(WizardForm);
with IconsLabel do begin
  AutoSize:=true;
  Left:=450; Top:=475;
  Width:=140;
  Font.Name:='Segoe Print';
  Font.Size:=9;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:IL}');
  Parent:=WizardForm.SelectProgramGroupPage;
  Transparent:=True;
end;

 IconsLabel:= TLabel.Create(WizardForm);
with IconsLabel do begin
  AutoSize:=true;
  Left:=460; Top:=489;
  Width:=140;
  Font.Name:='Segoe Print';
  Font.Size:=9;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:IL2}');
  Parent:=WizardForm.SelectProgramGroupPage;
  Transparent:=True;
end;

 IconsLabel:= TLabel.Create(WizardForm);
with IconsLabel do begin
  AutoSize:=true;
  Left:=470; Top:=503;
  Width:=140;
  Font.Name:='Segoe Print';
  Font.Size:=9;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:IL3}');
  Parent:=WizardForm.SelectProgramGroupPage;
  Transparent:=True;
end;

  ReadyLabel:= TLabel.Create(WizardForm);
with ReadyLabel do begin
  AutoSize:=false;
  Left:=0; Top:=460;
  Width:=550; Height:=30;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:RL}');
  Parent:=WizardForm.ReadyPage;
  Transparent:=True;
  Alignment := taCenter;
end;

  InstallingLabel:= TLabel.Create(WizardForm);
with InstallingLabel do begin
  AutoSize:=false;
  Left:=10; Top:=510;
  Width:=550; Height:=30;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:InstL}');
  Parent:=WizardForm.InstallingPage;
  Transparent:=True;
end;

  ProgressLabel:= TLabel.Create(WizardForm);
with ProgressLabel do begin
  AutoSize:=false;
  Left:=100; Top:=490;
  Width:=550; Height:=30;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:PL}');
  Parent:=WizardForm.InstallingPage;
  Transparent:=True;
end;

with WizardForm.ProgressGauge do begin
  left:=100; top:=510;
  width:=220;
end;

  ISDoneProgressBar:= TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar do begin
  Left:=900; top:=480;
  Width:=220; Height:= WizardForm.ProgressGauge.Height;
  Max:= 1000;
  Parent:= WizardForm.InstallingPage;
end;

  FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do begin
  AutoSize:=false;
  Left:=0; Top:=440;
  Width:=550; Height:=45;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:FL}');
  Parent:=WizardForm.FinishedPage;
  Transparent:=True;
  Alignment := taCenter;
end;

 FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do begin
  AutoSize:=false;
  Left:=0; Top:=465;
  Width:=550; Height:=45;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:FL2}');
  Parent:=WizardForm.FinishedPage;
  Transparent:=True;
  Alignment := taCenter;
end;

FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do begin
  AutoSize:=false;
  Left:=0; Top:=515;
  Width:=620; Height:=45;
  Font.Name:='Segoe Print';
  Font.Size:=9;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant('{cm:FL3}');
  Parent:=WizardForm.FinishedPage;
  Transparent:=True;
  Alignment := taCenter;
end;
end;


////////////////////////////////////////////////////////////////////////
procedure Buttons();
begin
with WizardForm.CancelButton do begin
  BringToFront;
  top:=510; left:=230;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold, fsItalic];
end;

with WizardForm.NextButton do begin
  BringToFront;
  top:=510; left:=120;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold, fsItalic];
end;

with WizardForm.BackButton do begin
  BringToFront;
  top:=510; left:=8;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold, fsItalic];
end;

with WizardForm.DirBrowseButton do begin
  BringToFront;
  top:=455; left:=640;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold, fsItalic];
end;

  AboutButton:= TButton.Create(WizardForm);
with AboutButton do begin
  BringToFront;
  top:=509; left:=8;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold];
  Parent:=WizardForm.WelcomePage;
  Caption:='Banshee';
  OnClick:=@url;
end;

  AboutButton:= TButton.Create(WizardForm);
with AboutButton do begin
  BringToFront;
  top:=509; left:=8;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold];
  Parent:=WizardForm.FinishedPage;
  Caption:='Banshee';
  OnClick:=@url;
end;
end;


////////////////////////////////////////////////////////////////////////
function InitializeUninstall: Boolean;
begin
  FileCopy(ExpandConstant('{app}\uninstall\1.bmp'), ExpandConstant('{tmp}\1.bmp'), False);
  FileCopy(ExpandConstant('{app}\uninstall\lr.bmp'), ExpandConstant('{tmp}\lr.bmp'), False);
  FileCopy(ExpandConstant('{app}\uninstall\td.bmp'), ExpandConstant('{tmp}\td.bmp'), False);
  FileCopy(ExpandConstant('{app}\uninstall\out.bmp'), ExpandConstant('{tmp}\out.bmp'), False);
  FileCopy(ExpandConstant('{app}\uninstall\icon.ico'), ExpandConstant('{tmp}\icon.ico'), False);
  FileCopy(ExpandConstant('{app}\uninstall\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
  FileCopy(ExpandConstant('{app}\uninstall\skin.cjstyles'), ExpandConstant('{tmp}\skin.cjstyles'), False);
  LoadSkin(ExpandConstant('{tmp}\skin.cjstyles'), '');
  Result:=True;
end;


////////////////////////////////////////////////////////////////////////
procedure InitializeUninstallProgressForm;
begin
with UninstallProgressForm do begin
  ClientWidth:=550; ClientHeight:=440;
  Center;
end;

with UninstallProgressForm.InnerNotebook do begin left:=0; top:=0; width:=550; height:=440; end;
with UninstallProgressForm.OuterNotebook do begin left:=0; top:=0; width:=550; height:=440; end;

with UninstallProgressForm.WizardSmallBitmapImage do begin Left:=700; end;
with UninstallProgressForm.PageDescriptionLabel do begin hide; end;
with UninstallProgressForm.PageNameLabel do begin hide; end;
with UninstallProgressForm.MainPanel do begin hide; end;
with UninstallProgressForm.StatusLabel do begin hide; end;

with UninstallProgressForm.CancelButton do begin
  BringToFront;
  top:=413; left:=445;
  Width:=100;
  Font.Size:=9;
  Font.Style:=[fsBold, fsItalic];
  enabled:=false;
end;

  Bmp:= TBitmapImage.Create(UninstallProgressForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  Bmp.Top:=0; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=380;
  Bmp.Stretch:= true;
  Bmp.Parent:=UninstallProgressForm.InstallingPage;

  Bmp:= TBitmapImage.Create(UninstallProgressForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\out.bmp'));
  Bmp.Top:=382; Bmp.Left:=0;
  Bmp.Width:=550; Bmp.Height:=60;
  Bmp.Stretch:= true;
  Bmp.Parent:=UninstallProgressForm.InstallingPage;

  Bmp:= TBitmapImage.Create(UninstallProgressForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=1; Bmp.Left:=1;
  Bmp.Width:=548; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:=UninstallProgressForm.InstallingPage;

  Bmp:= TBitmapImage.Create(UninstallProgressForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\td.bmp'));
  Bmp.Top:=377; Bmp.Left:=1;
  Bmp.Width:=548; Bmp.Height:=3;
  Bmp.Stretch:= true;
  Bmp.Parent:=UninstallProgressForm.InstallingPage;

  Bmp:= TBitmapImage.Create(UninstallProgressForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=1; Bmp.Left:=1;
  Bmp.Width:=3; Bmp.Height:=378;
  Bmp.Stretch:= true;
  Bmp.Parent:=UninstallProgressForm.InstallingPage;

  Bmp:= TBitmapImage.Create(UninstallProgressForm);
  Bmp.Bitmap.LoadFromFile(ExpandConstant('{tmp}\lr.bmp'));
  Bmp.Top:=1; Bmp.Left:=546;
  Bmp.Width:=3; Bmp.Height:=378;
  Bmp.Stretch:= true;
  Bmp.Parent:=UninstallProgressForm.InstallingPage;

with UninstallProgressForm.ProgressBar do begin
  Left:=150; top:=390;
  Width:=394;
end;

  UNInstallingLabel:= TLabel.Create(UninstallProgressForm);
with UNInstallingLabel do begin
  AutoSize:=false;
  Left:=10; Top:=390;
  Width:=550; Height:=30;
  Font.Name:='Segoe Print';
  Font.Size:=11;
  Font.Color:=color1;
  Font.Style:=[fsBold, fsItalic];
  Caption:=ExpandConstant(' {cm:UNL}');
  Parent:=UninstallProgressForm.InstallingPage;
  Transparent:=True;
end;
end;



////////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then begin
  GetFreeSpaceCaption(nil)
end;

if CurPageID=wpWelcome then begin
If WizardForm.FindComponent('CancelButton') is TButton then
  TButton(WizardForm.FindComponent('CancelButton')).hide;
end;

if CurPageID=wpInstalling then begin
If WizardForm.FindComponent('CancelButton') is TButton then
  TButton(WizardForm.FindComponent('CancelButton')).Enabled:=False;
end;

if CurPageID=wpInstalling then begin
If WizardForm.FindComponent('CancelButton') is TButton then
  TButton(WizardForm.FindComponent('CancelButton')).left:=445;
end;
end;

////////////////////////////////////////////////////////////////////////
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin case CurUninstallStep of usPostUninstall: begin
  DeleteFile(ExpandConstant('{userdesktop}\{#GameName}.lnk')) end; end;
end;


////////////////////////////////////////////////////////////////////////
procedure InitializeWizard();
begin
  Size();
  Image();
  WizardLabel();
  Buttons();
end;


////////////////////////////////////////////////////////////////////////
procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')),0);
  UnloadSkin;
end;


////////////////////////////////////////////////////////////////////////
procedure DeinitializeUninstall();
begin
  UnloadSkin;
end;

[/spoiler]

Заранее спасибо за потраченное время.
С уважением.
 
Последнее редактирование:

murlakatamenka

Новичок
alakir, всего лишь дописать в секцию [Setup]
Код:
[Setup]
...
UninstallFilesDir={app}\uninstall
[Setup]: UninstallFilesDir
Default value:
{app}

Description:
Specifies the directory where the "unins*.*" files for the uninstaller are stored.

Note: You should not assign a different value here on a new version of an application, or else Setup won't find the uninstall logs from the previous versions and therefore won't be able to append to them.

Example:
UninstallFilesDir={app}\uninst
 
Последнее редактирование:

alakir

Мимокрокодил
murlakatamenka, это помогает, но после удаления, остается корневой каталог (пустой) с игрой (названием игры).
Необходимо, что б все файлы удалялись полностью (включая папку с игрой).
Если Вас не затруднит, помогите решить эту проблему. В идеале - добавить/убрать в скрипт недостающие сточки.
Я не очень силен в скриптах, только учусь.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху