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

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

Тема в разделе "Inno Setup", создана пользователем YURSHAT, 27 фев 2012.

Статус темы:
Закрыта.
  1. Тех. админ Администратор

    Регистрация:
    26 дек 2011
    Сообщения:
    518
    Симпатии:
    616
    Пол:
    Мужской
    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 | Апдейт (миниинсталл)
     
    Последнее редактирование модератором: 2 окт 2012
    Serega, InVise 2x, Core-2 и 30 другим нравится это.
  2. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    945
    Симпатии:
    644
    Как сделать, чтобы проценты в деинсталляторе округлялись до десятых. Надеюсь сам вопрос и суть его понятна.
    pr:=i1*100/i2;
    p:=+Format('%f',[pr])+'%';
    StringChange(p,',','.');
    ImgPBSetPosition(PB,pr);
     
    Последнее редактирование: 27 фев 2012
  3. Тех. админ Администратор

    Регистрация:
    26 дек 2011
    Сообщения:
    518
    Симпатии:
    616
    Пол:
    Мужской
    Предельно ;)
    Код (Text):
    p:=+Format('%.1f',[pr])+'%';
     
  4. Ветеран

    Регистрация:
    23 июн 2011
    Сообщения:
    60
    Симпатии:
    29
    Сори, продублирую пост
    может у кого идеи есть, как реализовать?
    я пока что додумался только gif-ку создать и попробовать через неё.
     
    Последнее редактирование: 28 фев 2012
  5. Старожил

    Регистрация:
    25 фев 2012
    Сообщения:
    2
    Симпатии:
    0
    парни помогите пожалуйста,выдает вот такую ошибку
    [​IMG]
    скрипт от r.g.механики
    [MOD=Gnom]Убирай картинки под спойлер. По вопросу - при деинсталляции нет фукций распаковки файлов.[/MOD]
    [ADMIN="Shegorat"]При деинсталляции нельзя использовать модуль b2p, нужно использовать стандартные функции ботвы.[/ADMIN]
     
    Последнее редактирование модератором: 28 фев 2012
  6. Ветеран

    Регистрация:
    26 дек 2011
    Сообщения:
    144
    Симпатии:
    29
    Azerbaijan1992
    Требуется расширенная версия Inno Setup от китайцев.
    [MOD=Gnom]А на скрине не она, случайно?[/MOD]
     
    Последнее редактирование модератором: 28 фев 2012
    MMR нравится это.
  7. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    945
    Симпатии:
    644
    С помощью isgsg.dll сделай.
    Ну, наверно только так
     
    Последнее редактирование: 29 фев 2012
    murlakatamenka нравится это.
  8. Старожил

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

    Регистрация:
    26 июн 2011
    Сообщения:
    945
    Симпатии:
    644
    Там же есть описание как им пользоваться. Если ты конечно не пробывал скомпилировать модуль.
     
    Saratov нравится это.
  10. Ветеран

    Регистрация:
    26 дек 2011
    Сообщения:
    144
    Симпатии:
    29
    Saratov
    Вот маленький пример, думаю разберешься.

    P.S. Так лучше будет ;)
     
    Последнее редактирование: 28 фев 2012
    Saratov и murlakatamenka нравится это.
  11. Ветеран

    Регистрация:
    23 июн 2011
    Сообщения:
    60
    Симпатии:
    29
    но что поменяется при этом, только процедура и dll-ка, но по сути то же самое будет
    например
    да, что-то типа такого, спасибо.
    один из участников форума поделился своей dll-кой, к-рая поодходит для моих нужд.
     
    Последнее редактирование: 2 мар 2012
  12. Старожил

    Регистрация:
    27 авг 2011
    Сообщения:
    23
    Симпатии:
    9
    Пол:
    Мужской
    Нуждаюсь в помощи:
    Как сделать так, чтобы при отсутствии файла компонента, страница с выбором компонентов в инсталляторе не появлялась ? То есть если бы отсутствовал, архив с компонентом, то этой бы страницы не было:
    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}

    Код (Text):

    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]
    Заранее спасибо...
     
  13. Борода Модератор

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

    Регистрация:
    26 дек 2011
    Сообщения:
    144
    Симпатии:
    29
    AntonOVS
    PHP:

    [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]
     
    Последнее редактирование модератором: 3 мар 2012
    AntonOVS нравится это.
  15. Старожил

    Регистрация:
    3 мар 2012
    Сообщения:
    6
    Симпатии:
    2
    Доброго времени суток.
    Помогите, пожалуйста с скриптом.
    Задачи: исправить скрипт таким образом, что б файлы для деинсталляции - "unins000.dat" и "unins000", при инсталляции перемещались в папку - "uninstall".
    В данный момент, после распаковки файлов в корневом каталоге создается папка - "uninstall", но файлы удаления лежат не в ней, а в корневом каталоге игры.
    [​IMG]
    Вот скрипт:
    #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

    Код (Text):

    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]

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

    Регистрация:
    23 июн 2011
    Сообщения:
    60
    Симпатии:
    29
    alakir, всё просто
    Код (Text):
    UninstallFilesDir={app}\uninstall
    :)
     
  17. Старожил

    Регистрация:
    3 мар 2012
    Сообщения:
    6
    Симпатии:
    2
    А что именно там нужно исправить?
    Или просто необходимо добавить эту строчку в [UninstallDelete] ?
    Можете привести пример?
     
    Последнее редактирование: 3 мар 2012
  18. Ветеран

    Регистрация:
    23 июн 2011
    Сообщения:
    60
    Симпатии:
    29
    alakir, всего лишь дописать в секцию [Setup]
    Код (Text):

    [Setup]
    ...
    UninstallFilesDir={app}\uninstall
     
     
    Последнее редактирование: 3 мар 2012
    Saratov и alakir нравится это.
  19. Старожил

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

    Регистрация:
    29 июн 2011
    Сообщения:
    139
    Симпатии:
    22
    PHP:

    [UninstallDelete]
    Type: filesandordirs; Name: "{app}"
     
     
    Saratov и alakir нравится это.
Статус темы:
Закрыта.

Поделиться этой страницей