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

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

Ответить
Настройки темы
Inno Setup. Прочие вопросы

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 30-03-2023

Внимание!!!
Данная тема не предназначена для обсуждения скриптов! Для этого создана отдельная тема!

Скрипты Inno Setup. Помощь и советы





Описание

Inno Setup - это бесплатный инсталлятор для программ Windows. Впервые появился в 1997 году, Inno Setup сегодня, конкурирует и даже превосходит многие коммерческие инсталляторы по возможностям и стабильности.

Основные достоинства:
  • Поддержка всех версий Windows используемых сегодня: Windows 10, Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP, Windows Server 2003 и Windows 2000 (независимо от пакета обновлений);
  • Обширная поддержка инсталляций 64-битных приложений на 64-битных выпусках Windows. Также поддерживает x64-разрядные процессоры. (При использовании процессоров Itanium необходимо установить Service Pack);
  • Поддержка создания одного файла EXE, что облегчает установку вашей программы через сеть. Также поддерживается разбивка на диски;
  • Стандартный стиль интерфейса мастера Windows 2000/XP;
  • Настраиваемые типы установки, например: Полная (Full), Компактная (Compact), Выборочная (Custom);
  • Возможность создания деинсталлятора;
  • Установка файлов:
    Включает интегрированную поддержку сжатия файлов (bzip2 и 7-Zip LZMA/LZMA2). Инсталлятор может сравнивать версии файлов, заменять загруженные в память файлы, ведет подсчет общедоступных файлов, регистрирует DLL/OCX и библиотеки типов, устанавливает шрифты;
  • Создание ярлыков, включая меню Пуск и на Рабочем столе;
  • Работа с системным реестром и файлами *.ini;
  • Имеет встроенную поддержку скриптов на Паскале;
  • Поддерживает создание инсталляторов на различных языках;
  • Поддержкивает пароли и шифрование инсталляторов;
  • Поддерживается тихая установка и тихая деинсталляция, с помощью ключей командной строки;
  • Доступен полный исходный код (Borland Delphi 2.0-5.0 и 2009).

Основной бесплатный конкурент - NSIS.

Последняя стабильная версия - 6.2.2 [15.02.2023]. История версий.
Официальные сборки Inno Setup 6.2.2:
Редакторы iss-скриптов:
  • Расширенная версия Inno Setup от Restools

    Сайт: http://restools.hanzify.org/
    Скачать:Рекомендуется к применению из-за огромного количества компонентов, функций и процедур, удобного интерфейса, наличия отладчика и Form Designer. Собран на основе исходников Inno Setup 5.5.1.
    Инструкция по установке

    Инструкция по установке:
    1. Установите ispack-5.5.1.exe или ispack-5.5.1-unicode.exe (5.5.1 - номер официальной версии Inno Setup для последующего обновления расширенной версией);
    2. Скачайте Inno Setup Compiler, распакуйте;
    3. Из одноимённой папки, в соответствии с установленной версией (ANSI или Unicode), скопируйте два файла (Compil32.exe, Templates.dat) в каталог Inno Setup (по умолчанию: C:\Program Files\Inno Setup 5\). Появится сообщение с подтверждением о замене файла, нажимаем 'Да'.
      Примечание: если у вас Unicode версия, то дополнительно примените твик реестра (файл CourierNew.reg) из папки UnicodeFontLink и перезагрузите компьютер.
    4. Скачайте Inno ISCmplr Setup, распакуйте;
    5. Из одноимённой папки, в соответствии с установленной версией (InnoSetup_ANSI или InnoSetup_Unicode), из подпапки FullVCL скопируйте все файлы в каталог Inno Setup (по умолчанию: C:\Program Files\Inno Setup 5\). Появится сообщение с подтверждением о замене файла, нажимаем 'Да'.

  • Inno Script Studio от Kymoto Solutions

    Сайт: https://www.kymoto.org/
    Скачать: Inno Script Studio v2.5.1 [28.11.2020]
    Inno Script Studio является новым, интуитивно понятным, графическим интерфейсом для создания и компиляции скриптов Inno Setup.
Дополнительно



Распаковщики/декомпиляторы инсталляторов Inno Setup

Параметры командной строки инсталлятора (ссылка)

Отправлено: 00:25, 24-08-2009

 

Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата El Sanchez:
Сайт: http://www.innoide.org/ »
более не существует. я так понимаю, данный проект полностью закрыт.

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

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

Отправлено: 08:22, 22-08-2012 | #351



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

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


Аватара для boss911

Alien


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

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


В шапке не нашел описание командной строки инсталлятора из русской справки, решил это дело исправить.

Код: Выделить весь код
/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталлятора. Выполнится только если DisableStartupPrompt секции [Setup] равна yes.

/SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки). 
Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим установки очень ускоренный, система перезагрузится не спрашивая. 

/SUPPRESSMSGBOXES
Instructs Setup to suppress message boxes. Only has an effect when combined with '/SILENT' and '/VERYSILENT'.
The default response in situations where there's a choice is:
• Yes in a 'Keep newer file?' situation. • No in a 'File exists, confirm overwrite.' situation. • Abort in Abort/Retry situations. • Cancel in Retry/Cancel situations. • Yes (=continue) in a DiskSpaceWarning/DirExists/DirDoesntExist/NoUninstallWarning/ExitSetupMessage/ConfirmUninstall situation. • Yes (=restart) in a FinishedRestartMessage/UninstalledAndNeedsRestart situation.
5 message boxes are not suppressible:
• The About Setup message box. • The Exit Setup? message box. • The FileNotInDir2 message box displayed when Setup requires a new disk to be inserted and the disk was not found. • Any (error) message box displayed before Setup (или Uninstall) could read the command line parameters. • Any message box displayed by [code ] support function MsgBox.
/LOG Указывает инсталлятору создать log-файл в папке TEMP для подробного отчета о действиях и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был, log-файл сообщит, что файл был действительно пропущен и почему. Log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не перезаписываются и не дополняются Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята пользователем. /LOG="filename" Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет заменен. Если файл не может быть создан, установка прервется и выдаст сообщение об ошибке. /NOCANCEL Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'. /NORESTART Указывает инсталлятору не перезагружать компьютер даже если это необходимо. /RESTARTEXITCODE=код выхода Задает инсталлятору код, который он должен возвратить, если необходима перезагрузка. Используется с '/NORESTART'. См. также
Коды выхода инсталлятора
0Установка успешно завершена. 1 Установка не инициализировалась. 2 Пользователь нажал Отмена до начала установки или выбрал Нет в окне "Эта программа установит...!. 3 Фатальная ошибка при подготовке перехода к следующей фазе установки (например, из-за отображения предустановочных страниц мастера во время самой установки). Такое случается редко, в основном из-за нехватки памяти или ресурсов системы. 4 Фатальная ошибка в процессе установки. Обратите внимание: к этим ошибкам не относится диалог Прервать-Повторить-Пропустить. В случае, если пользователь при этом выберет Прервать, будет возвращен код выхода 5. 5 Пользователь нажал Отменить во время установки или выбрал Прервать в диалоге Прервать-Повторить-Пропустить. 6 Установка внезапно прервалась отладчиком (в IDE было использовано Run | Terminate). Перед кодами выхода 1, 3 или 4 обычно появляется сообщение об ошибке, описывающее ее. Новые версии Inno Setup могут выдавать дополнительные коды выхода, поэтому приложения, проверяющие их, могут вести себя по-разному в зависимости от полученного кода выхода. Все ненулевые коды выхода значат, что инсталлятор не завершил установку успешно.
/LOADINF="filename" Указывает инсталлятору загрузить параметры установки из указанного файла после проверки командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF=' command. Не забудьте ставить кавычки при использовании имен, содержащих пробелы. /SAVEINF="filename" Указывает инсталлятору сохранять параметры установки в указанный файл. Не забудьте ставить кавычки при использовании имен, содержащих пробелы. /LANG=language Задает используемый язык. language задает имя языка, заданного в параметре секции [Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки. /DIR="x:\dirname" Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения. Должен быть задан полный путь. /GROUP="folder name" Меняет имя папки на странице Выбор папки меню Пуск. Если директива DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки игнорируется. /NOICONS Указывает инсталлятору проверять, выбрана ли команда Не создавать значков на странице Выбор папки меню Пуск. /TYPE=type name Overrides the default setup type. If the specified type exists and isn't a custom type, then any /COMPONENTS parameter will be ignored. /COMPONENTS="comma separated list of component names" Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки указывает инсталлятору менять тип установки на Выборочный. If no custom type is defined, this parameter is ignored. Only the specified components will be selected; the rest will be deselected. If a component name is prefixed with a "*" character, any child components will be selected as well (except for those that include the dontinheritcheck flag). If a component name is prefixed with a "!" character, the component will be deselected. This parameter does not change the state of components that include the fixed flag.
  • Например: Deselect all components, then select the "help" and "plugins" components: /COMPONENTS="help,plugins"
  • Например: Deselect all components, then select a parent component and all of its children with the exception of one: /COMPONENTS="*parent,!parent\child"
/TASKS="comma separated list of task names" Specifies a list of tasks that should be initially selected. Only the specified tasks will be selected; the rest will be deselected. Use the /MERGETASKS parameter instead if you want to keep the default set of tasks and only select/deselect some of them. If a task name is prefixed with a "*" character, any child tasks will be selected as well (except for those that include the dontinheritcheck flag). If a task name is prefixed with a "!" character, the task will be deselected.
  • Например: Deselect all tasks, then select the "desktopicon" and "fileassoc" tasks: /TASKS="desktopicon,fileassoc"
  • Например: Deselect all tasks, then select a parent task and all of its children with the exception of one: /TASKS="*parent,!parent\child"
/MERGETASKS="comma separated list of task names" Like the /TASKS parameter, except the specified tasks will be merged with the set of tasks that would have otherwise been selected by default. If UsePreviousTasks is set to yes, the specified tasks will be selected/deselected after any previous tasks are restored.
  • Например: Keep the default set of selected tasks, but additionally select the "desktopicon" and "fileassoc" tasks: /MERGETASKS="desktopicon,fileassoc"
  • Например: Keep the default set of selected tasks, but deselect the "desktopicon" task: /MERGETASKS="!desktopicon"
/PASSWORD=password Задает пароль. Если не указана директива Password секции [Setup], этот параметр игнорируется. Если введен неправильный пароль, параметр также игнорируется.
Как видим, к сожалению, перевод не полный, посему, если кто силен, милости просим помочь (обновлю в своем посте), уверен, многие скажут спасибо.

За перевод русской справки спасибо BagIra и bugron.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:00, 22-08-2012 | #352


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


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

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


Здравствуйте, подскажите а что делать инсталятор расспаковывает только файлы удаления (unins001 и unins001.dat) а сами файлы нет.

Отправлено: 10:22, 23-08-2012 | #353


Аватара для boss911

Alien


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

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


by_gangster

Для начала нужно увидеть скрипт.

Отправлено: 10:38, 23-08-2012 | #354


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


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

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


boss911, скрипт покажу, и ещё вопрос при компиляции выскакивает ошибка типа Default.isl не определяет версию inno setup

Отправлено: 10:43, 23-08-2012 | #355


Аватара для boss911

Alien


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

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


by_gangster

Какая версия компилятора (анси/юникод), официал или рестулс? Поставьте 5.5.1 с официального сайта и проверьте на нем еще раз.

Отправлено: 11:28, 23-08-2012 | #356


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


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

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


boss911, всё сорри моя ошибка насчёт Default.isl а вот проблема с расспаковкой осталась
Код: Выделить весь код
;by Evgeniy Bytaikis
#include "botva2.iss"
#include "BASS_Module.iss"

[Setup]
AppName=Sigerous Mod для COP (fix 19.03)
AppVerName=Sigerous Mod v2.2
DefaultDirName={reg:HKLM\SOFTWARE\GSC Game World\STALKER-COP,InstallPath}
InfoBeforeFile=embedded\InfoBefore.rtf
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\logo.bmp
SetupIconFile=embedded\sgm.ico
Compression=lzma2/max
OutputDir=.

[Registry]
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "SigerousVers"; ValueType: String; ValueData: "2.2";

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

[CustomMessages]
rus.ArcCancel=Отменить распаковку
rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Files]
Source: *.arc; DestDir: {app}; Flags: dontcopy
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: BASS_Files\*;  DestDir: {tmp}; Flags: dontcopy
Source: music.mp3;  DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Attribs: hidden system
Source: STALKER.cjstyles; DestDir: {app}; Attribs: hidden system
Source: splash.png; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[UninstallDelete]
Type: filesandordirs; Name: "{app}\gamedata"
Type: files; Name: "{app}\SGM_COP_history.rtf"
Type: files; Name: "{app}\SGM_COP_info.rtf"
Type: files; Name: "{app}\SGM_what_in_v2.2.txt"

[_Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
  Label2: TLabel;
  Label1: TLabel;

procedure PageNameLabelClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
  with WizardForm do
  begin
    AutoScroll := False;
    ClientWidth := ScaleX(530);
  end;

  with WizardForm.CancelButton do
  begin
    Left := ScaleX(393);
  end;

  with WizardForm.NextButton do
  begin
    Left := ScaleX(293);
  end;

  with WizardForm.BackButton do
  begin
    Left := ScaleX(205);
  end;

  with WizardForm.OuterNotebook do
  begin
    Width := ScaleX(529);
  end;

  with WizardForm.WelcomeLabel2 do
  begin
    Left := ScaleX(200);
  end;

  with WizardForm.WelcomeLabel1 do
  begin
    Left := ScaleX(200);
  end;

  { Label2 }
  Label2 := TLabel.Create(WizardForm);
  with Label2 do
  begin
    Name := 'Label2';
    Parent := WizardForm.SelectDirPage;
    Caption := 'Если программа автоматически не найдет папку с игрой, то выберите вручную.';
    Font.Color := clWhite;
    Font.Height := -11;
    Font.Name := 'Tahoma';
    Font.Style := [];
    ParentFont := False;
    Transparent := False;
    Left := ScaleX(0);
    Top := ScaleY(120);
    Width := ScaleX(411);
    Height := ScaleY(13);
  end;

  with WizardForm.DiskSpaceLabel do
  begin
    Caption := 'Требуется как минимум 2.35 ГБ  свободного дискового пространства.';
  end;

  with WizardForm.MainPanel do
  begin
    Width := ScaleX(529);
    Color := clGray;
  end;

  with WizardForm.WizardSmallBitmapImage do
  begin
    Left := ScaleX(32);
    Width := ScaleX(495);
  end;

  { Label1 }
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Name := 'Label1';
    Parent := WizardForm.MainPanel;
    Caption := 'Информация';
    Font.Color := clWindowText;
    Font.Height := -11;
    Font.Name := 'Tahoma';
    Font.Style := [fsBold];
    ParentFont := False;
    Transparent := False;
    Left := ScaleX(24);
    Top := ScaleY(11);
    Width := ScaleX(74);
    Height := ScaleY(13);
  end;

  with WizardForm.PageDescriptionLabel do
  begin
    Left := ScaleX(13);
    Top := ScaleY(58);
    Width := ScaleX(11);
  end;

  with WizardForm.PageNameLabel do
  begin
    Color := clSilver;
    ParentColor := False;
    OnClick := @PageNameLabelClick;
    Width := ScaleX(0);
  end;

{ ReservationBegin }
  // Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

procedure PageNameLabelClick(Sender: TObject);
begin

end;

const
    Archives = '{src}\*.arc';    // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно
    totalSize = 2393;             // total uncompressed size of archive data in mb, REQUIRED for correct progress displaying

    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;

type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии

#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and below (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;

    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; Size: Extended; end;

var
    ExtractFile: TLabel;
    lblExtractFileName: TLabel;
    btnCancelUnpacking: TButton;
    CancelCode, n, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb: Integer;
    baseMb: Integer;
    LastTimerEvent: DWORD;

    MouseLabel,SiteLabel: TLabel; // Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера //

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

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

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';
/////////////////Splash///////////////
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
/////////////////Splash////////////
/////////////////Скин////////////////////////////////////////////////////
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';

procedure LoadSkinU(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('STALKER.cjstyles');
LoadSkin(ExpandConstant('{tmp}\STALKER.cjstyles'), '');
Result:= true
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), False);
FileCopy(ExpandConstant('{app}\STALKER.cjstyles'),
ExpandConstant('{tmp}\STALKER.cjstyles'), False); LoadSkinU(ExpandConstant('{tmp}\STALKER.cjstyles'), '');
Result:=True;
end;
/////////////////Скин///////////////////////////////////////////////////
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://vk.com/by_gangster', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed;
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clblue;
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen;
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clblue;
end;
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////

procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
        SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    if FindFirst(ExpandConstant(dir), FSR) then
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(Archives)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );

    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

    Result:= MultiByteBuf;
end;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail then                          {hh:mm:ss format}
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour} then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000 then           {1..60 minutes}
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
   else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;

    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='written') and (totalSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;

        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;

        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))]);
        ExtractFile.Caption := s;

        // Calculate and show current percents
        percents:= (Mb*1000) div totalSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        WizardForm.FileNameLabel.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    allSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Show;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    WizardForm.ProgressGauge.Max:= totalSize;
    // Get the size of all archives
    allSize:= FindArcs(Archives);
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);   //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {время начала распаковки}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0

    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb

        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:   msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения
            Log(msgError);
            Break;    //прервать цикл распаковки
        end;
    end;
    // Hide labels and button

    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

//    стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
//    if CurStep = ssInstall then
//      if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (распаковщик вернул ошибку)
        WizardForm.FinishedLabel.Font.Color:= $0000C0;    // red (красный)
        WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
    end;
end;
procedure InitializeWizard();
begin
  RedesignWizardForm;
    with WizardForm.ProgressGauge do
    begin
        
        // Create a label to show current FileName being extracted
        lblExtractFileName:= TLabel.Create(WizardForm);
        lblExtractFileName.parent:=WizardForm.InstallingPage;
        lblExtractFileName.autosize:=false;
        lblExtractFileName.Width:= Width;
        lblExtractFileName.top:=Top + ScaleY(35);
        lblExtractFileName.Caption:= '';
        lblExtractFileName.Hide;

        // Create a label to show percentage
        ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.autosize:=false;
        ExtractFile.Width:= Width;
        ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
        ExtractFile.caption:= '';
        ExtractFile.Hide;
         /////Музыка/////
        ExtractTemporaryFile('BASS.dll');
        ExtractTemporaryFile('Music.mp3');
        ExtractTemporaryFile('botva2.dll');
        ExtractTemporaryFile('MusicButton.png');
        BASS_Init(ExpandConstant('{tmp}\Music.mp3')) //Просто запускаем музыку
        BASS_CreateOnOffButton(ExpandConstant('{tmp}\MusicButton.png'), 478, 320, 50, 38, 4) //Создаем кнопку вкл/выкл
        //////Конец музыка/////

        /////Splash////////////
        ExtractTemporaryFile('splash.png');
        ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False,$FFFFFF,10);
        //////Splash///////////
        end;
        
    // Create a 'Cancel unpacking' button and hide it for now.
    btnCancelUnpacking:=TButton.create(WizardForm);
    btnCancelUnpacking.Parent:= WizardForm;
    btnCancelUnpacking.SetBounds(ScaleX(260), WizardForm.cancelbutton.top, ScaleX(140), WizardForm.cancelbutton.Height);
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
    btnCancelUnpacking.Caption:= cm('ArcCancel');
    btnCancelUnpacking.Hide;

///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
    MouseLabel:=TLabel.Create(WizardForm);
    MouseLabel.Width:=WizardForm.Width;
    MouseLabel.Height:=WizardForm.Height;
    MouseLabel.Autosize:=False;
    MouseLabel.Transparent:=True;
    MouseLabel.OnMouseMove:=@SiteLabelMouseMove2;
    MouseLabel.Parent:=WizardForm;

    SiteLabel:=TLabel.Create(WizardForm);
    SiteLabel.Left:=10;
    SiteLabel.Top:=330;
    SiteLabel.Cursor:=crHand;
    SiteLabel.Font.Color:=clblue;
    SiteLabel.Font.Name := 'Tahoma';
    SiteLabel.Caption:='Installer by Evgeniy Bytaikis';
    SiteLabel.OnClick:=@SiteLabelOnClick;
    SiteLabel.OnMouseDown:=@SiteLabelMouseDown;
    SiteLabel.OnMouseUp:=@SiteLabelMouseUp;
    SiteLabel.OnMouseMove:=@SiteLabelMouseMove;
    SiteLabel.Parent:=WizardForm;
///////////////// Кликабельная текстовая http-ссылка в левом нижнем углу инсталлера /////////////////
end;
//////Музыка/////////скин
procedure DeinitializeSetup();
begin
  BASS_DeInit;
  gdipShutdown
end;
/////Конец музыка//////скин

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010F107000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E7457696474680312020C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680322020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10A544E6577427574746F6E0C43616E63656C427574746F6E044C6566740389010C4578706C696369744C6566740389010000F10A544E6577427574746F6E0A4E657874427574746F6E044C6566740325010C4578706C696369744C6566740325010000F10A544E6577427574746F6E0A4261636B427574746F6E044C65667403CD000C4578706C696369744C65667403CD000000F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B0557696474680311020D4578706C69636974576964746803110200F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10E544E6577537461746963546578740D57656C636F6D654C6162656C32044C65667403C8000C4578706C696369744C65667403C8000000F10E544E6577537461746963546578740D57656C636F6D654C6162656C31044C65667403C8000C4578706C696369744C65667403C800000000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C6963697457696474680311020E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650D53656C656374446972506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED0000F2020106544C6162656C064C6162656C32044C656674020003546F700278055769647468039B0106486569676874020D0743617074696F6E1488000000D095D181D0BBD0B820D0BFD180D0BED0B3D180D0B0D0BCD0BCD0B020D0B0D0B2D182D0BED0BCD0B0D182D0B8D187D0B5D181D0BAD0B820D0BDD0B520D0BDD0B0D0B9D0B4D0B5D18220D0BFD0B0D0BFD0BAD18320D18120D0B8D0B3D180D0BED0B92C20D182D0BE20D0B2D18BD0B1D0B5D180D0B8D182D0B520D0B2D180D183D187D0BDD183D18E2E0C466F6E742E43686172736574070F44454641554C545F434841525345540A466F6E742E436F6C6F720707636C57686974650B466F6E742E48656967687402F509466F6E742E4E616D6506065461686F6D610A466F6E742E5374796C650B000A506172656E74466F6E74080B5472616E73706172656E74080000F10E544E6577537461746963546578740E4469736B53706163654C6162656C0743617074696F6E1475000000D0A2D180D0B5D0B1D183D0B5D182D181D18F20D0BAD0B0D0BA20D0BCD0B8D0BDD0B8D0BCD183D0BC20322E333520D093D0912020D181D0B2D0BED0B1D0BED0B4D0BDD0BED0B3D0BE20D0B4D0B8D181D0BAD0BED0B2D0BED0B3D0BE20D0BFD180D0BED181D182D180D0B0D0BDD181D182D0B2D0B02E000000F110544E65774E6F7465626F6F6B50616765095265616479506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650E496E7374616C6C696E67506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED00000000F1065450616E656C094D61696E50616E656C05576964746803110205436F6C6F720706636C477261790D4578706C69636974576964746803110200F10C544269746D6170496D6167651657697A617264536D616C6C4269746D6170496D616765044C656674022005576964746803EF010C4578706C696369744C65667402200D4578706C69636974576964746803EF010000F2020106544C6162656C064C6162656C31044C656674021803546F70020B055769647468024A06486569676874020D0743617074696F6E120A00000018043D0444043E0440043C043004460438044F040C466F6E742E43686172736574070F44454641554C545F434841525345540A466F6E742E436F6C6F72070C636C57696E646F77546578740B466F6E742E48656967687402F509466F6E742E4E616D6506065461686F6D610A466F6E742E5374796C650B066673426F6C64000A506172656E74466F6E74080B5472616E73706172656E74080000F10E544E65775374617469635465787414506167654465736372697074696F6E4C6162656C044C656674020D03546F70023A055769647468020B0C4578706C696369744C656674020D0B4578706C69636974546F70023A0D4578706C696369745769647468020B0000F10E544E6577537461746963546578740D506167654E616D654C6162656C055769647468020005436F6C6F720708636C53696C7665720B506172656E74436F6C6F7208074F6E436C69636B0712506167654E616D654C6162656C436C69636B0D4578706C696369745769647468020000000000F110544E65774E6F7465626F6F6B506167650C46696E6973686564506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100000000
boss911, ещёвыскакивает такая ошибка, я просто когдато работал с другой версией inno setup ultra тогда этого не было

Последний раз редактировалось by_gangster, 23-08-2012 в 13:52. Причина: oshibka


Отправлено: 13:52, 23-08-2012 | #357


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата by_gangster:
Flags: dontcopy »
Ну и чего мы хотим? Этот флаг как раз отвечает за то, чтоб файл НЕ распаковывался.

Цитата by_gangster:
ещёвыскакивает такая ошибка »
используй вместо PChar PAnsiChar и все получится. Скорей всего установил Юникод, а раньше пользовался анси.

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


Отправлено: 21:49, 23-08-2012 | #358


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


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

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


Gnom_aka_Lexander, спасибо конечно но у меня не обычный скрипт то есть при компиляции он упаковывает архивы .arc а потом уже инсталятор расспаковывает только файлы в указанную папку, а так он расспаковывает только сам архив

Отправлено: 23:11, 23-08-2012 | #359


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата by_gangster:
инсталятор расспаковывает только файлы удаления (unins001 и unins001.dat) а сами файлы нет. »
А у тебя и нет ни одного файла в секции [Files], который должен быть распакован в папку, куда идет установка.
Цитата by_gangster:
а так он расспаковывает только сам архив »
Где?? на архиве у тебя тоже стоит
Цитата by_gangster:
Flags: dontcopy »
ТОесть, он тоже никуда не распаковывается.

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

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

Отправлено: 14:08, 24-08-2012 | #360



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход